int a;
int *pa;
int *ppa[4]; 普通指针数组
int b[3];
int *pb=b; <==> int *pb=&b[0];
int *ppb[4]={pb,&b[0],pb++,&b[1]}; 数组指针数组
int c[2][3];
int *pc1=c; <==>int *pc1=&c[0][0]; //指针
int (*pc2)[3]=c; //行指针
行指针降为普通指针
*pc2+i //第0行第i个元素的地址
*(pc2+1)+i<==> *pc2[1]+i //第1行第i个元素的地址
int *ppb[4]={pc1,&c[0][0],pc++,&c[0][1]}; 数组指针数组
ppb[0] 表示数组第一个元素既 pc1 // *ppb[0] =c[0][0]
int (*ppc2[4])[3]={c,pc2,c++,pc2++}; 行指针数组
int fun(int a)
int *fun(int a) //指针函数
int (*pfun)(int a)=fun //函数指针
int (*ppfun[4])(int a)={pfun,fun} //函数指针数组
ppfun[0]=pfun;
struct stu{
}s1,s2;
struct stu *p //结构体指针
p=&s1;