数组指针和指针数组(C语言)

数组指针:指向数组名的指针,即保存的是首元素的地址。


        int arr[]={1,2,3,4,};   //一维素组
	int brr[][2]={1,2,3,4};   //二维数组
	int crr[][2][2]={1,2,3,4,5,6};  //三维数组
	int *pa=arr;   //一维指针
	int (*pb)[2]=brr;   //二维指针
	int (*pc)[2][2]=crr;   //三维指针

一维素组:

int arr[]={1,2,3,4,};   //一维素组

int *pa=arr;   //一维指针

arr(数组名):一维数组首元素地址;

arr+1:一维数组第二个元素的地址;

数组指针和指针数组(C语言)_第1张图片

二维数组:

int brr[][2]={1,2,3,4};   //二维数组

int (*pb)[2]=brr;   //二维指针

brr(数组名):二维数组首行地址;

brr+1:数组第二行的地址;

数组指针和指针数组(C语言)_第2张图片

brr[0]:二维数组首元素的地址;

brr[0]+1:二维数组第二个元素的地址;

brr[0][0]:二维数组首元素的值;

数组指针和指针数组(C语言)_第3张图片

三维数组:

int crr[][2][2]={1,2,3,4,5,6};  //三维数组,深度为1;

int (*pc)[2][2]=crr;   //三维指针

crr(数组名):三维数组首行的地址(深度为0);

crr+1:三维数组第二行的地址(深度为0);

数组指针和指针数组(C语言)_第4张图片

crr[0]:三维数组首行的首元素的地址(深度为0);

crr[0]+1:三维数组首行的第二个元素的地址(深度为0);

数组指针和指针数组(C语言)_第5张图片

crr[0][0]:三维数组首行首元素的首元素的地址(深度为1);

crr[0][0]+1:三维数组首行首元素的第二个元素的地址(深度为1);

crr[0][0][0]:三维数组首行首元素的首元素的值(深度为1);

数组指针和指针数组(C语言)_第6张图片


指针数组:数组元素全为指针的数组(数组的用法基本适用)。

如:

char *arr[3][7]={"123456","456","789"};   //系统分配3*7个空间(连续)

arr[0]:存储“123456”元素的地址;

(\0为字符串结束标志,若空间足够系统自动添加)

数组指针和指针数组(C语言)_第7张图片

char *brr[3]={"12","4567","7891011"};   //系统自己检测分配(不一定连续)

brr[0]:存储的是“12”元素的地址;

数组指针和指针数组(C语言)_第8张图片

指针数组中每一个元素所指的字符串可以不等长,通过指针间接访问数组中的元素,但是无法修改某一个字符。


你可能感兴趣的:(c语言)