對于數組的初始化需要注意以下幾點:
- 可以只給部分元素賦值。當{ }中值的個數少于元素個數時,只給前面部分元素賦值。例如:
int a[10]={12, 19, 22 , 993, 344};
表示只給 a[0]~a[4] 5個元素賦值,而后面 5 個元素自動初始化為 0。
當賦值的元素少于數組總體元素的時候,剩余的元素自動初始化為 0:
對于short、int、long,就是整數 0;
對于char,就是字符 ‘\0’;
對于float、double,就是小數 0.0。
我們可以通過下面的形式將數組的所有元素初始化為 0:
int nums[10] = {0};
char str[10] = {0};
float scores[10] = {0.0};
由于剩余的元素會自動初始化為 0,所以只需要給第 0 個元素賦值為 0 即可。
- 只能給元素逐個賦值,不能給數組整體賦值。例如給 10 個元素全部賦值為 1,只能寫作:
int a[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
而不能寫作:
int a[10] = 1;
- 如給全部元素賦值,那么在定義數組時可以不給出數組長度。例如:
int a[] = {1, 2, 3, 4, 5};
等價于
int a[5] = {1, 2, 3, 4, 5};
- scanf() 讀取數據時需要一個地址(地址用來指明數據的存儲位置),而 nums[i] 表示一個具體的數組元素,所以我們要在前邊加 & 來獲取地址。
for(i=0; i<10; i++){scanf("%d", &nums[i]); //注意取地址符 &,不要遺忘哦}
5.數組長度 length 最好是常量表達式,例如 10、204 等,這樣在所有編譯器下都能運行通過;如果 length 中包含了變量,例如 n、4m 等,在某些編譯器下就會報錯
6.數組名與指針的關系
數組名都表示數組第一個元素的地址,可將其看作是一個指針常量。數組名與&arr[0]的意義一致。
int arr[5] = {1,2,3,4.5};
int *p = arr; //用指針變量p指向arr,p中存儲的是數組首元素的地址。
arr[ 1 ]; //訪問數組中的第2個元素。
*( arr+1 ); //與 arr[ 1 ] 作用相同。
*arr + 1 ; //*的優先級高于+,表示第一個元素的值+1。
arr[5]; //訪問越界,產生隨機值。
2[arr]; //與 *(arr +2)作用相同。
本文是摘抄筆記,希望支持原創,原創地址如下:
https://blog.csdn.net/Erica_ou/article/details/80809479
http://c.biancheng.net/view/1828.html