快速区分数组指针和指针数组
浅显概况:两者区分根据最后两个字来快速判断 ,数组指针本质上就是指针,指针数组本质上就是数组。
数组指针:形如 int (*p)[n],表示一个指向有n个整型元素的指针,每次指针加一时,都横跨了sizeof(int)*n位的距离。
指针数组:形如 int *p[n], 表示一个存有n个整型类型的指针的数组,这里执行p+1是错误的,这样赋值也是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]…p[n-1],而且它们分别是指针变量可以用来存放变量地址。
两种方式用他们表示二维数组:
数组指针方式:
int a[3][4];
int (*p)[4]; //定义一个数组指针,指向包含4个整型元素的一维数组。
p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
此时p即可表示二维数组了。
测试代码如下:
指针数组方式:
int *p[3];
int a[3][4];
for(i=0;i<3;i++)
p[i]=a[i];
类比
数组 | 指针数组 | |
---|---|---|
形如 | int p[4] | int *p[4] |
含义 | 一个有4个整型元素的数组 | 一个有4个指向整型类型的指针的数组 |
赋值 | p[0] = 1 | int b =1; p[0]= &b; |