提示:初学C语言的可以简单看看。内容包括数组的创建、初始化等简单内容。
数组的简单认识
一维数组的创建与初始化
数组是一组相同类型元素的集合。数组创建的方式:
type_t arr_name[const_n];
其中:
type_t
是数组元素的类型
arr_name
是数组名
const_n
是数组中type_t
类型的元素个数,必须是常量表达式
数组空间大小在程序编译期间就已经确定,因此下面的代码错误。
int main(int argc, char* argv[])
{
int count = 5;
// error C2466: 不能分配常量大小为 0 的数组
// error C2057: 应输入常量表达式
// error C2133: “arr”: 未知的大小
int arr[count];
return 0;
}
上面代码中,count在运行期间才会有值5,因此编译期间编译器不知道count的值,也就无法确定arr空间的大小,编译报错。
数组在定义时就要初始化。
定义数组时指定数组的大小大小:
int arr1[4] = { 1,2,3 }; // 正常,未初始化的元素值默认为0
int arr2[4] = { 1,2,3,4 }; // 正常初始化
int arr3[4] = { 1,2,3,4,5 }; // 错误 error C2078: 初始值设定项太多
定义数组时不指定数组的大小:
int arr1[] = {}; // 错误 error C2059: 语法错误:“}”
int arr2[] = { 1,2,3,4 }; // 正常,编译器会自动计算数组的大小
一维数组下标运算与数组大小
数组通过下标引用操作符:[]
来修改或者获取数组中的元素:
int arr[4] = { 1,2,3,4 };
arr[0] = 10; // 修改数组中的元素
int a = arr[3]; // 获取数组中的元素
通过下标访问数组,数组下标是从0开始
的,也就是第1个元素的下标为0,最后一个元素的下标为数组的size-1。
我们可以通过sizeof运算符来获得数组中元素的个数:用整个数组所占空间大小sizeof(arr)
除以数组中一个元素所占的空间大小sizeof(arr[0])
。
int sz = sizeof(arr) / sizeof(arr[0]);
一维数组在内存中的存储
下面定义了数组包含4个整型元素的数组arr
,并打印出数组中元素所在的地址。
int main(int argc, char* argv[])
{
int arr[4] = { 10,20,30,40 };
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
printf("%p\r\n", &arr[i]);
}
return 0;
}
/* output:
0019FECC
0019FED0
0019FED4
0019FED8
*/
从输出的地址可以看出,数组arr
中的4个元素在内存中是顺序存储的。
二维数组的创建与初始化
二维数组的创建如下:
int main(int argc, char* argv[])
{
int arr1[2][4] = { 1,2,3,4,5,6,7,8 };
int arr2[2][4] = { {1,2,3,4},5,6,7,8 };
int arr3[2][4] = { {1,2,3,4},{5,6,7,8} };
int arr4[2][4] = { 1,2 };
int arr5[2][4] = { {1,2},{3,4} };
int arr6[][4] = { {1,2},3,4,5 };
return 0;
}
在初始化时,一种是在一个大括号内顺序初始化,另一种便是大括号内嵌套大括号初始化,显然第二种更直观。和一维数组一样,二维数组的元素按每一维顺序存储,未初始化的元素值默认为0。
必须得给二维数组的第2维赋值,因为这决定着每一维中元素的个数,如果没有指定第1位的值,编译器根据第2维的值来计算第1维的值,如上面的数组arr6
。
二维数组的使用
二维数组也是通过下标引用操作符来获取或者修改其元素的值:
int main(int argc, char* argv[])
{
int arr[2][4] = { {1,2,3,4},{5,6,7,8} };
arr[0][0] = 10;
arr[1][3] = 80;
return 0;
}
二维数组中每一维的元素下标也是从0开始,到该维的size-1结束。