数组指针,指针数组的区别理解

在一维数组中,int*p=arr
在这里插入图片描述
上图为一维数组,箭头指向该数组首元素的地址,数组表示的类型如下表所示:

一维数组 类型
arr(指向首元素的指针) int*
arr+1(指向首元素的指针向右移动一个格子) int*
arr[0](0号下标对应的数组中的值) int
arr[0]+1(给0号下标对应的值加1) int

在二维数组中,int brr[3][4]
在这里插入图片描述

二维数组 类型
brr int(*p)[4]
brr+1 int(*p)[4]
brr[0] (等同于arr) int*
brr[0]+1 int*
brr[0][0] int

由于brr[3][4]为二维指针,所以,brr是数组的行指针,即红色的格子,也是个指针,用(*p)表示,一位数组指针指向一个元素,而它是指向数组的指针,并且它所指向的这个数组与arr[4] 的大小以及类型相等,相当于brr[0] 等同 arr整个数组,所以brr的类型为int (*p)[4],brr+1则代表的是绿色的格子,所以类型也为int (*p)[4]。
刚解释 brr[0] 等同 arr,则类型也相等,为int *型,即图中向上指的箭头,指向红格子的首元素的地址,brr[0]+1也为int *型,brr[0][0]代表的如图中所示为第一行第一个元素,其是int型,如果brr[0][0]=10,则brr[0][0]+1=11,则brr[0][0]+1也为int 型。

猜你喜欢

转载自blog.csdn.net/qx04070711/article/details/83721365
今日推荐