C:一维数组与二维数组的类型
一维数组以及其类型:
int arr[4];
arr[0] = 10;
一维数组 | 类型 |
arr | int *(整型指针) |
arr+1 | int * |
arr[0] | int |
arr[0]+1 | int |
注释:
arr为数组,如上图所示,红色箭头为整型指针,其指向首元素的地址。
arr+1则代表第二个元素的地址,所以也为整型指针。arr[0]代表上图中第一个格子,即阴影部分,其中值为10,则arr[0]=10,arr[0]+1=11,它们的类型都为整型。
二维数组以及其类型:
int brr[3][4];
brr[0][0] = 10;
二维数组 | 类型 |
brr | int (*p)[4] |
brr+1 | int (*p)[4] |
brr[0] | int * |
brr[0]+1 | int * |
brr[0][0] | int |
brr[0][0]+1 | int |
注释:
由于brr[3][4]为二维指针,所以,brr是数组的行指针,即蓝色的格子,也是个指针,用(*p)表示,它是指向数组的指针,并且这个数组与arr[4]的大小以及类型相等,相当于brr[0] 等同 arr[4],所以brr的类型为int (*p)[4],brr+1则代表的是紫色的格子,所以类型也为int (*p)[4]。
刚解释brr[0] 等同 arr[4],则类型也相等,为int *型,即图中蓝色箭头,指向蓝格子的首元素的地址,brr[0]+1也为int *型,即图中紫色箭头,指向紫格子的首元素的地址。
brr[0][0]代表的如图中所示为第一行第一个元素,其是int型,brr[0][0]=10,则brr[0][0]+1=11,则brr[0][0]+1也为int 型。
注意区分:int (*p)[4]:指向数组的指针,简称数组指针;int *p[4]:存放指针的数组,简称指针数组,如上图所示。