C++中的數組詳情
1、數組
數組其實也是一種數據格式,不過是一種復合類型,它可以存儲多個同類型的值。
使用數組可以將同類型的變量整合起來管理,比如說我們現在要記錄三個同學的考試得分。我們當然可以寫成int a1
, a2
, a3
;,看起來也不會很麻煩。但如果我們有 50 個同學呢?如果有 5000 個同學呢?顯然就不能通過這種方式瞭,何況每個變量都要起一個獨一無二的名字,這也很麻煩。
使用數組就不會有這樣的問題,我們隻需要規定數組的長度,通過一個變量就可以存儲任意多個值。有 5000 個同學就寫成int scores[5000]
;就都能存下瞭。
定義一個數組隻需要三個要素:變量類型
、數組名
、數組長度
即可。
typename arrayName[arraySize];
有一點需要註意,arrayName
的類型不是數組,而是typename
數組。也就是說數組也是區分類型的,這也是 C++中的數組和 Python
中 List
的區別之一。
2、數組的使用
2.1 元素訪問
對於一個數組來說,當我們需要訪問其中的元素時,可以通過下標的方式來訪問。
在絕大多數計算機程序當中,數組的下標通常都是從 0 開始的。第一個數存在第 0 位,第二個數存在第 1 位,以此類推。下標通過方括號表示,
如:
cout << arrayName[0] << endl;
註意:我們傳入的下標不能大於等於數組的長度(由於是從 0 開始的),編譯器往往不會報錯,隻會給出一個警告,但運行的過程當中可能會引發各種意想不到的問題。因為很可能你訪問的內存已經超過瞭程序管理的范圍,訪問到瞭一些操作系統內存或者是其他禁止訪問的內存,引起難以想象的後果。
int a[3]; cout << a[10] << endl;
在上面的例子當中,我們聲明瞭一個長度為 3 的數組,但是訪問瞭下標 10。這顯然超出瞭數組的范圍,但是當我們編譯的時候編譯器並不會報錯,隻會拋出一個警告。要知道程序員往往是看不見警告的。
如果一不小心就會錯過這個信息,導致潛在的風險。所以在訪問之前一定要切記,確保下標在數組的范圍內。
2.2 初始化
數組和其他變量一樣,也可以在聲明的時候進行初始化。
最常見的方式是將它的每一個元素的值寫出來:
int a[3] = {0, 1, 2};
編譯器會將花括號當中的元素一個一個地填到數組對應的位置當中,花括號當中的元素數量並不一定需要和數組長度相等,如果小於數組長度,那麼就會初始化對應數量的元素。
int a[3] = {0, 1};
那麼數組 a 的前兩位會被初始化成 0 和 1,其他的位置會被初始化為0。
如果想要將數組當中所有元素都初始化成 0,則比較特殊,我們隻需要寫一個 0 即可。
int a[100] = {0};
但隻有初始化成 0 的時候可以這麼操作,如果傳入其他值,則不會生效。
還有一種初始化方式是我們不填數組的長度,而通過初始化的方式讓編譯器替我們去算:
int a[] = {0, 1, 2, 3, 4};
編譯器通過執行初始化知道 a 數組的長度為 5,不過 C++ primer
強烈建議我們不用這麼幹。因為我們人工數出來的結果可能和編譯器不一樣(我們會犯錯),增加我們 debug
的難度。
3、C++11 的初始化方式
C++11 當中對於數組的初始化又有瞭一些新的定義,首先是可以省略等號:
int a[3] {1, 2, 3};
其次花括號內可以留空,這等價於將元素全部設置為 0:
int a[100] = {}; int b[10] {};
列表初始化時禁止縮窄轉化,我們在上一篇文章當中講過:
char cs[4] = {0, 0x3f3f3f3f, 'a', 'z'}; // 禁止,因為0x3f3f3f3f超過瞭char范圍
到此這篇關於C++中的數組詳情的文章就介紹到這瞭,更多相關C++中的數組內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
註:文章轉自微信公眾號:Coder梁(ID:Coder_LT)