- 数组指针(行指针)
int(*p)[n]
; - ()的优先级比较高,所以首先p是一个指针,指向一个整形数组。n为数组的长度,且当我们要执行p+1时,需要运行n个int型数据。
- 例如将二维数组赋予一指针,则:
int a[3][4];
int (*p)[4]; //定义一个数组指针,指向含有4个元素的数组
p = a; // 将二维数组的首地址赋予a,a[0][0]
p++; //将该语句执行,p=p+1,p跨过行a[0][]指向a[1][]
- 所以数组指针指向一堆数组的指针,行指针
- 指针数组
int *p[n]
- [ ]的优先级高,先与p结合为一个数组,再由int*说明这是一个整形指针数组,它有n个指针类型的数组元素。
- p是一个不可知的表示,只存在p[0],p[1],p[2],…p[n-1],它们分别是指针变量可以用来存放变量地址。但是可以表示为
*p = a
,这里*p是指针数组的的一个元素的值,a是首地址的值。 - 将二维数组赋给一指针数组,则:
int *p[3];
int a[3][4];
for(i = 0; i < 3; i++)
p[i] = a[i];
- 这里
int *p[3]
表示一个一维数组内分别存放三个指针变量,分别是p[0], p[1],p[2],所以要分别赋值。
-
数组指针只是一个指针变量,它占有内存中一个指针的存储空间,指针数组是多个指针变量,以数组形式存在内存中,占有多个指针的存储空间
-
同时表示数组中第i行j列的一个元素:
p[i][j] = (*(p+i))[j] = *(*p[i] + j) = *(*(p+i)+j)
- 注意优先级 ()> [ ] > *