指针数组与数组指针
根本原因:符号的优先级
由于 () > [ ] > * ,导致在定义一个指针关于数组的时候会出现意思偏差。
int *p[3] 与 int (*p)[3]的区别
int *p[3] 指针数组
由于 [ ] 优先级高,可以这么写:int *(p[3]);表示为一个数组 p[3] 里面的元素都为 指针。
代码演示
#include<stdio.h>
int main(void)
{
int *p[3];
int a[3]={1,2,3};
int i;
for (i=0;i<3;i++)
{
p[i]=&a[i];
printf("%d",*p[i]);
}
return 0;
}
运行结果:
123
--------------------------------
Process exited after 0.06895 seconds with return value 0
请按任意键继续. . .
int (*p)[3] 数组指针
表示为 一个指针 *p 指向一个含有三个元素的数组。
可以把 *p 想成 一个变量 b;即 (*p)[3] = b[3] 。
代码演示
int main(void)
{
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int (*p)[3] = a; //相当于b[3] = a[3][3]的首地址
for(int i=0;i<3;i++)
{
printf("%d",(*p)[i]);
}
printf("\n");
printf("%d%d\n",(*p)[0]+1,(*p)[0]+2);
return 0;
}
运行结果:
123
23
--------------------------------
Process exited after 0.06631 seconds with return value 0
请按任意键继续. . .