Appearance
一维数组
例如, int arr[5]; 这是一个数组的声明表达式 , 需要注意 :
- 中括号中四不准 : 不为 0 , 不为空 (如果直接初始化可以) , 不为小数 , 不为变量[^1]
- 数组一旦被定义 , 其大小不能改变
- 下标范围为
0~n-1上面的第二点和 JavaScript 的数组又不太一样 , 所以 C 语言编程更吃数据结构的基本功 .
初始化
- 全部初始化, 例如 :
int arr[3] = {1, 2, 3}; - 部分初始化, 例如 :
int arr[3] = {1};, 其他位子上会用 0 自动初始化 ; - 部分初始化 ( C99 ) , 例如
int arr[4] = { [2] = 3 };, 只有arr[2]有初始值 3 , 其他为 0 ; - 特殊初始化, 例如 :
int arr[] = {1, 2, 3};, 编译器能够从赋值上知道数组大小 ;
数组元素调用
arr[0] 可以调用数组的元素 , 它和一般的变量没什么区别 .
数组越界
在调用 arr[0] 这样的元素的时候 , 是可以调用到超出下标边界的元素的 , C 语言不会检查下标是否越界 .
⛔ 注意
- 不能使用另一个数组来初始化数组 , 例如
int a[2] = {1,2}; int b[2] = a;是错误的 ! - 用数组变量赋值数组变量也是错误的 !
- 数组变量不能作为函数的参数和返回值 !
在 C 语言中有一个规则 : 当数组作为右值使用的时候 , 自动转换成指向数组首元素的指针.
[^1]: 在 C99 中支持变量作为数组长度进行声明的 , 即变长数组 ( Variable Length Array ) , 但它语法复杂 , 限制性大 , 性能开销大 , 所以不推荐使用 .