首先我们要知道什么是数组指针、指针数组,并且如何去区分它们。
int *p1[10];
int (*p2)[10];
什么区别?那个是数组指针?那个是指针数组?
指针数组:就是一个数组,数组的每个元素就是一个指针。
定义 int *p1[10];
[]优先级高,先与p结合成为一个数组,再由int说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1是错误的,这样赋值也是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]…p[n-1],而且它们分别是指针变量可以用来存放变量地址。
数组指针:它是指针,指向一个数组的指针。
定义 int (*p2)[10];
()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度它是一个数组。
例子:
int main()
{
int c[2][4] = { 1,2,3,4,
5,6,7,8 };
int *a[4]; //指针数组
int(*b)[4]; //数组指针
b = c;
//将数组c中元素赋给数组a
for (int i = 0; i < 4; i++)
{
a[i] = c[i];
}
printf("%d\n", *(a[0] + 1)); //输出2就对
printf("%d\n", *(a[1] + 1)); //输出6就对
printf("%d\n", (*b)[2]); //输出3就对
printf("%d\n", (*(b + 1))[2]); //输出7就对
return 0;
}