对于数组的初始化需要注意以下几点:
- 可以只给部分元素赋值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:
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