7.1 数组指针
数组指针 的意思,即为通过 指针 引用 数组,例如int (*p)[10]
,此时 p 是一个 指针变量 ,指向一个数组大小为 10 的 数组,所以int (*p)[10]
即为一个数组指针。
二维数组与数组指针的关系
-
在我们对指针进行加法(减法)运算时,它前进(后退)的步长与它指向的数据类型有关
-
p指向的数据类型是int[4],那么p+1就前进4×4=16个字节,p-1就后退16个字节,这正好是数组a所包含的每个一维数组的长度。
-
也就是说p+1会使得指针指向二维数组的下一行,p-1会使得指针指向数组的上一行。
-
-
数组名a在表达式中也会被转换为和p等价的指针。
下面我们使用指针 p 来访问二维数组中的每个元素,按照上面的定义:
-
p 指向数组a的开头,也即第0行;p+1前进一行,指向第1行。
-
*(p+1) 表示取地址上的数据,也就是整个第1行数据。注意是一行数据,是多个数据,不是第1行中的第0个元素,下面的输出结果证明了这一点:
#include<stdio.h> int main(){ int a[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11}}; int(*p)[4]=a; printf("%d\\n",sizeof(*(p+1))); return0;