(一)数组篇
一,一维数组
1,定义
存储相同类型数据,且在内存空间连续的一种数据结构类型。数组三要素包括:起始地址、步长、范围(或类型、组名、大小)。
int
array[M];
//array的类型为”int [M]
”
2,初始化
部分初始化,其余元素补0;
int array[10]={1,2,3};
清零
int array[10]={0};
越界不检
int array[10]={0,1,2,3,4,5,6,7,8,9,10};
单独赋值
int array[10]={[3]=10};
长度自检
int array[]={1,2,3};
//数组长度为3
3,访问
(1)数组名作为整体进行访问
求数组大小
int a[10];
printf("lenth=%d\n",sizeof(a));
//sizeof(a)==40取地址
printf("&a=%p\n",&a)
//&a
printf("&a+1=%d\n",&a+1);
//&a+40&array[0] => &array[0]+1
// 地址 +4Bytes
array => array+1
//地址+4Bytes
&array => &array+1
//地址+40Bytes
(2)数组名作为成员进行访问
int array[10];
array[2]==*(array+2)==2[array]
//三者等价
4,返回堆中一维数据
(1)返回值返回(一级指针)
char * allocMem(int n)
{
char *p=(char *)malloc(n);
return p;
}
(2)参数返回(二级指针)
int allocMem(char **p,int n)
{
*p=(char *)malloc(100);
return *p
}
5,一维数组名的本质——一级指针
int array[10];
array == &array[0]
由于array[0]类型为“int”,所以&array[0]类型为“int ”,所以一维数组名array的类型为“int *”,即一级指针
。
二,二维数组
1,定义
int
Array[M][N];
由定义,Array的是一个长度为5的一维数组。Array[M]的类型为“int [N]
”,也就是说,从Array[0]……到Array[M-1]其内容为一个类型为int [N]
的数据,也就是长度为N的一维数组。
2,初始化
行可省略列不可省略,其他同一维。
int Array[2][3]={1,2,3,4,5,6};
int Array[][3]={1,2,3,4,5,6};
int Array[][3]={1,2,3,4};
int Array[][3]={[1][2]=3};
//C99标准下
3,访问
(1)数组名作为整体进行访问
求大小
int Array[3][4];
printf("sizeof(Array)=%d\n",sizeof(Array));
//sizeof(Array)=48取地址
int Array[3][4];
printf("%d\n",sizeof(&Array));
//&Array
printf("%p\n",sizeof(&Array+1));
//&Array+48Bytes
(2)数组名作为成员进行访问
int Array[3][4];
Array == &Array[0]
Array+M == Array[M]
Array[M] == &Array[M][0]
*(Array+M)+N == &Array[M][N]
*(*(Array+M)+N) == Array[M][N]
4,二维数组名的本质——数组指针
int
Array[3][4];
Array == &Array[0]
Array[0] == &Array[0][0]
由于Array[3]的类型为“int [4]
”,也就是一维数组类型,Array[0]也是一个一维数组“int [4]
”类型,则&Array的类型为“int (*)[4]
”。所以,Array的类型为“int (*)[4]
”。二维数组名的本质为数组指针。