数组(array)由数据类型相同的一系列元素组成
用于识别数组元素的数字被称为下标(subscript)、索引或偏移量
通过数组下标访问数组中的元素(element),数组下标从 0 开始
地址的打印用转换说明 %p(十六进制)
二维数组:以数组为数组元素的数组
数组类型 数组名[常量表达式];
int arr[5];
注意:
int arr1[5] = { 1,2,3,4,5 };
部分初始化,未初始化的元素会被设置为 0
int arr2[5] = { 1,2 };
int arr[5] = { 0 };
省略方括号中的数字,让编译器自动匹配数组大小和初始化列表中的项数
int arr3[] = { 1,2,3,4,5 };
另外还有指定初始化器,如
int arr[10] = { [5] = 11 };
,指定初始化下标为 5 的元素即数组的第 6 个元素为 11
如果指定初始化器后面有更多的值,后面的值将被用于初始化指定元素后面的元素,如int arr[10] = { [5] = 11,12,13 };
初始化对象为下标为 5、6、7 的三个元素
char ch1[5]={'a','b','c'};
char ch2[]={'a','b','c'}; //用strlen求数组长度,结果为随机值15
字符串以空字符(\0)结尾
如果 char 类型的数组末尾包含一个表示字符串末尾的空字符 \0,则该数组中的内容就构成一个字符串
char ch3[5]="abc"; //数组的四个元素:a b c \0
char ch4[]="abc"; //数组长度为4(字符串末尾必有一个'\0')
[ ]: 下标引用操作符,(优先级为 1,即最高)
数组元素的表现形式: 数组名[下标]
int main()
{
int arr[10] = { 0 };
//计算数组的元素个数
//整个数组的大小除以的一个元素的大小就是元素的个数
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for (i = 0; i < 10; i++)//赋值
arr[i] = i;
for (i = 0; i < 10; i++)//打印
printf("%d\n", arr[i]);
return 0;
}
对于方括号中的常量表达式的值:
//创建数组并初始化
int arr[10] = { 0 };//数组长度为10,即10个元素
//访问数组元素
arr[0] = 1;//访问第一个元素
一维数组在内存中是连续存放的,随着数组下标的增长,地址是由低到高变化的
转换说明 %p: 按地址的格式打印(十六进制)
int main()
{
int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
int i = 0;
for (i = 0; i < 10; i++)
printf("&arr[%d] = %p\n", i, &arr[i]);
return 0;
}
二维数组:以数组为数组元素的数组
数组类型 数组名[常量表达式1][常量表达式2];
int arr[2][3];
int arr1[2][3] = { 1,2,3,4,5,6 };
int arr2[2][3] = { 1,2,4,6 };
int arr3[2][3] = { {1,2,3},{4,5,6} };
int arr4[2][3] = { {1,2},{4,6} };
int arr5[][3] = { {1,2,3},{4,5,6},{7,0,0} };
int arr6[][4] = { {0,0,3},{0},{0,10} };
int arr7[][3] = { 1,2,3,4,5,6,7 };
int main()
{
int arr[][4] = { {1,2},{3,4},{4,5} };
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
二维数组占用多个连续的内存空间
int main()
{
int arr[][4] = { {1,2},{3,4},{4,5} };
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
}
}
return 0;
}
int main()
{
int arr[5] = { 1,2,3,4,5 };
printf("%p\n", arr);
printf("%p\n", &arr[0]);
}
(1)sizeof(数组名)
计算整个数组的大小,单位是字节,这时的数组名表示整个数组
(2)&数组名
取整个数组的地址,这时的数组名表示整个数组
在函数原型或函数定义头中,数组形式的形参(int arr[])可以替代指针形式的形参(如int* arr),即 int arr[] 形式和 int arr 形式都表示 arr 是一个指向 int 的指针*