关于C数组的总结
一维数组的创建和初始化
例如创建一个长度为10的整型数组int a[10]; int为数组的类型,10为数组的长度,注意:数组[ ]括号内的内容必须为常量,不能为变量。
数组的初始化是指给所创建的数组赋初值,例如
int arr[10]={1,2,3,4}; 长度为10,除去所赋的值后面其余六个数为0
intarr1[]={1,2,3}; 长度为3
intarr2[3]={1,2,3}; 长度为3
chararr4[3]={'a','b','c'}; 长度为3
chararr5[]={'a','98','c'};长度为3
chararr6[]="abcdef";长度为7最后一个字符为\0
通常使用for循环给数组赋我们所需要的值
for(i =0; i <10; i++)
{
scanf("%d",&a[i]);
}
一维数组的使用 一维数组通过下标来访问进而使用 下标从0开始
for(i =0; i <10; i++)
{
printf("%d", a[i]);
}
数组的大小可以通过计算得到
inta[10];
intsize=sizeof(a)/sizeof(a[0]);
一维数组在内存中的存储
一维数组的指针访问
首先我们看看这个
我们会发现数组名a的地址和a[0]的地址是一样的,那么是否说明数组名的地址就是数组的首元素的地址
我们取出数组名的值
取出的值是和首元素的值一样,所以我们可以断定数组名的地址就是首元素的地址
由此可见*(a+i)等价于a[i]
由以上可得我们可以通过数组名加整数的方式访问整个数组,因此我们可以通过指针访问数组
二维数组的初始化
inta1[2][3]={{1,2,3},{2,3,4}};
chara2[4][5]={{2,3},{4,5}};
二维数组在内存中的存储
二维数组的指针访问
此时我们依然可以通过指针访问数组,但是要注意在二维数组中数组名不再是首元素的地址。所以我们要把指针指向第一个元素的地址。
关于二维数组名地址的问题
我们可以把二维数组想象成元素是一维数组的一维数组,所以二维数组数组名的地址就是第一个一维数组元素的地址,也就是二维数组中第一行的地址。
在一维数组中数组名指首元素的地址,但当以下两种情况代表整个数组的地址
1. &数组名 如&a
2. Sizeof(数组名) 括号内只有数组名一个内容时
二维数组除了数组名是代表第一行的地址,其余&数组名,sizeof(数组名)都指的是整个数组的地址