前言
经常有人会搞混 int *ap[10] 和 int (*pa)[10] 到底哪一个是指针数组,哪一个是数组指针,下面我们来捋一捋,怎样区分数组指针和指针数组,以及它们的区别。一、数组指针
数组指针,即指向数组的指针
int a[1][10],b[3][9],c[9];
int *p;//指向一维数组的指针变量,也可指向整型变量
int (*pa)[10];//指向二维数组的指针变量
//p=a;pa=b;pa=c;都会报错
p=c;
pa=a;
上面两个语句都可以是在定义数组指针,其中p只能指向一维数组(或整型变量),pa只能指向二维数组,且列数都是10。其中pa++表示指到该二维数组的下一行的首地址。
二、指针数组
指针数组,即由指针组成的数组
int a,b,c,d;
int *ap[10];
ap[0]=&a;
ap[1]=&b;
ap[2]=&c;
ap[3]=&d;
优先级:()>[]>*,[ ]与ap结合的优先级比 * 高,所以ap[10]是一个数组,相当于有10个指针变量
总结
//数组指针
int *p;//指向一维数组的指针变量,也可指向整型变量
int (*pa)[10];//指向二维数组的指针变量
//指针数组
int *ap[10];