C語言全方位講解數(shù)組的使用
接著上次的操作符的詳解,讓我們來簡單了解C語言里的數(shù)組。
一維數(shù)組的創(chuàng)建和初始化
1.數(shù)組的創(chuàng)建
數(shù)組是一組相同類型的元素的集合。
2.數(shù)組創(chuàng)建方式
type_t(數(shù)組類型) arr_name(數(shù)組名) [const_n](用來指定數(shù)組大小)
3.數(shù)組的初始化
數(shù)組的初始化是在其定義的時候就應該執(zhí)行的,如:為5個已經(jīng)知道的整形數(shù)據(jù)進行排序
//正確 int Arr[5] = { 1, 2, 3, 4, 5 }; //而不能用下面這種方式 int Arr[5]; Arr[5] = { 1, 2, 3, 4, 5 };
因為對于 Arr[5] = 來說,這是一個賦值操作,將右值賦值給左值,一切常數(shù)、字符和字符串都是右值。在這里 { 1, 2, 3, 4, 5 }; 并不是右值的一種,所以這是錯誤的。
另一個錯誤是,Arr[5] 下標為 5 這個元素實際上并不存在的屬于數(shù)組的越界。
有數(shù)字類型的初始化,自然也有字符類型的初始化
字符類型初始化的兩種方式:
char arr[5]={'a','b','c','d','e'}; char arr[5]= "abcde ";
1.空字符是字符串的終止符(空字符本身不是字符串的一部分,所以字符串的長度并不包含空字符)
2.操作字符串時,必須保證字符串以空字符(\0)結(jié)尾(不以空字符結(jié)尾的字符序列,不是字符串)。
一維數(shù)組的使用
例
用單引號形式初始化的數(shù)組代表只有這些數(shù)據(jù),并且在末端不包含\0
總結(jié)
- 數(shù)組是使用下標來訪問的,下標是從0開始。
- 數(shù)組的大小可以通過計算得到。
- Int sz = sizeof(arr)/sizeof(arr[0])
一維數(shù)組的存儲
當我們定義了長度為5的整型數(shù)組,操作系統(tǒng)就會為其分配連續(xù)的五個內(nèi)存地址。
這些地址用來存放數(shù)據(jù),每一個地址所占的字節(jié)是數(shù)組的數(shù)據(jù)類型所決定的。 如int類型的每一個地址占據(jù)著4個字節(jié),double類型的8個。
因為每個整形大小為四個字節(jié),所以如圖每個地址間隔為4。
講完了一維數(shù)組的知識點,讓我們簡單了解一下二維數(shù)組
二維數(shù)組的創(chuàng)建與初始化
1.二維數(shù)組的創(chuàng)建
第一個括號指定行,第二個括號指定列
可以只對部分元素賦值,未賦值的元素自動取“零”值。例如:
int arr[3][4]={1,2,3,4,5}
2.二維數(shù)組的初始化
第一行:123 第二行:45
二維數(shù)組的列不能省略行可以在括號內(nèi)大括號分割明確時省略
二維數(shù)組的存儲
二維數(shù)組在內(nèi)存中的存儲
如果定義一個這樣的二維數(shù)組int a[3][4]={undefined{1,3,5,7},{9,11,13,15},{17,19,21,23}};
則其在內(nèi)存中的表示可能下面這樣的。
由上圖可以看出,在內(nèi)存中二維數(shù)組是按照行主序進行存儲的,從內(nèi)存的角度上看,二維數(shù)組本質(zhì)就是一個一維數(shù)組。如果把二維數(shù)組的每一行看成一個整體,即看成一個數(shù)組中的一個元素,那么整個二維數(shù)組就是一個一維數(shù)組。而二維數(shù)組的名字代表二維數(shù)組第0行的首地址(注意它是代表一行元素的首地址,而不是第0行第0列元素的首地址,雖然是相等的,但不能這么理解,所以在沒有強制轉(zhuǎn)換的情況下,二維數(shù)據(jù)要么通過行指針進行參數(shù)傳遞,要么通過二維指針進行參數(shù)傳遞)。
數(shù)組的越界
這里講的數(shù)組長度存在一個界,而一旦超過了這個大小,就會發(fā)生一些未知的錯誤,也就是所謂的越界
這里用一個例子來說明下越界后數(shù)組內(nèi)部的值的情況:
根據(jù)代碼可知,當數(shù)組越界后,其數(shù)值是不確定的。
總結(jié)
以上就是初階數(shù)組的基本內(nèi)容。如果你讀到了這里,非常感謝你能看完的文章!??!
到此這篇關于C語言全方位講解數(shù)組的使用的文章就介紹到這了,更多相關C語言 數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C語言 while for do while循環(huán)體詳解用法
在不少實際問題中有許多具有規(guī)律性的重復操作,因此在程序中就需要重復執(zhí)行某些語句。一組被重復執(zhí)行的語句稱之為循環(huán)體,能否繼續(xù)重復,決定循環(huán)的終止條件2021-10-10C++中拷貝構(gòu)造函數(shù)的總結(jié)詳解
深拷貝和淺拷貝可以簡單理解為:如果一個類擁有資源,當這個類的對象發(fā)生復制過程的時候,資源重新分配,這個過程就是深拷貝,反之,沒有重新分配資源,就是淺拷貝2013-09-09OpenCV中C++函數(shù)imread讀取圖片的問題及解決方法
利用C++函數(shù)imread讀取圖片的時候返回的結(jié)果總是空,而利用C函數(shù)cvLoadImage時卻能讀取到圖像。怎么回事?今天小編通過本教程給大家簡單說明原因2017-03-03在c和c++中實現(xiàn)函數(shù)回調(diào)
如何在c和c++中實現(xiàn)函數(shù)回調(diào)呢?現(xiàn)在小編就和大家分享一下在c/c++中實現(xiàn)函數(shù)回調(diào)的示例代碼,需要的朋友可以參考下2013-07-07C++時間戳轉(zhuǎn)化操作實例分析【涉及GMT與CST時區(qū)轉(zhuǎn)化】
這篇文章主要介紹了C++時間戳轉(zhuǎn)化操作,結(jié)合實例形式分析了C++時間戳轉(zhuǎn)換與顯示操作的原理與具體實現(xiàn)技巧,涉及GMT與CST時區(qū)轉(zhuǎn)化,需要的朋友可以參考下2017-05-05