(一)数组篇
一,一维数组
1,定义
存储相同类型数据,且在内存空间连续的一种数据结构类型。数组三要素包括:起始地址、步长、范围(或类型、组名、大小)。
intarray[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]”。二维数组名的本质为数组指针。
本文详细介绍了数组的概念及使用方法,包括一维数组与二维数组的定义、初始化、访问方式及其本质。并给出了具体的示例代码。
858

被折叠的 条评论
为什么被折叠?



