结构体和多维数组的理解

C/C+++结构体和多维数组的理解,希望大家批评指正。


结构体:其实就可可以看做是一个普通类型(int),做函数参数时,也是值得传递。

多维数组的数组名和&数组名理解:

一维数组数组名     数组的首元素首地址 ,&数组名     整个数组的首地址

多维数组: 数组名     一维数组的首地址 ,&数组名     整个数组的首地址

证明如下:

一维数组 数组名     数组的首元素首地址 ,&数组名     整个数组的首地址

int main(int argc, char *argv[])
{
	int arr1[2];
	printf("arr1:%d    arr1+1:%d\n",arr1,arr1+1); 
	printf("&arr1:%d    &arr1+1:%d\n",&arr1,&arr1+1); 	
}

    输出:

    arr1:2686784    arr1+1:2686788                      相差:4字节

    &arr1:2686784    &arr1+1:2686792                相差:8字节=2*4

二维数组: 数组名     一维数组的首地址 ,&数组名     整个数组的首地址

int main(int argc, char *argv[])
{
	int arr1[2][3];
	printf("arr1:%d    arr1+1:%d\n",arr1,arr1+1); 
	printf("&arr1:%d    &arr1+1:%d\n",&arr1,&arr1+1); 	
}

    输出:

    arr1:2686752    arr1+1:2686764                      相差:12字节=3*4

    &arr1:2686752    &arr1+1:2686776                相差:24字节=2*3*4

三维数组 数组名     一维数组的首地址(包含后面的二维和三维数组) ,&数组名     整个数组的首地址

int main(int argc, char *argv[])
{
	int arr1[2][3][4];
	printf("arr1:%d    arr1+1:%d\n",arr1,arr1+1); 
	printf("&arr1:%d    &arr1+1:%d\n",&arr1,&arr1+1); 	
}

    输出:

    arr1:2686688    arr1+1:2686736                    相差:48字节=3*4*4

    &arr1:2686688    &arr1+1:2686784              相差:96字节=2*3*4*4

四维数组 数组名    一维数组的首地址(包含后面的二维、三维和四维数组)  ,&数组名     整个数组的首地址

int main(int argc, char *argv[])
{
	int arr1[2][3][4][5];
	printf("arr1:%d    arr1+1:%d\n",arr1,arr1+1); 
	printf("&arr1:%d    &arr1+1:%d\n",&arr1,&arr1+1); 	
}

    输出:

    arr1:2686304    arr1+1:2686544                      相差:240字节=3*4*5*4

    &arr1:2686304    &arr1+1:2686784                相差:480字节=2*3*4*5*4

N维数组: 数组名     一维数组的首地址(包含后面的二维、三维......N-1维数组) ,&数组名     整个数组的首地址


数组参数等效的指针参数理解:

        数组参数                            等效的指针参数

一维数组 char a[30]                    指针:char *a

指针数组 char *a[30]                  指针的指针:char **a

二维数组char a[10][30]              数组的指针:char (*a)[30]


数据类型 * 指针名  其实就是告诉编译器,这个指针指向一个什么数据类型的内存,在对指针操作时,可以知道其指向的内存占用多少内存,但是指针本身是4个字节(sizeof)。


你可能感兴趣的:(结构体和多维数组的理解)