数组名可以用指向数组的指针表示,而指针数组可以用指向指针的指针表示。
char *a[]={"Hello","the","World"}; //指针数组
char **pa=a; //指向指针的指针
pa++;
//声明2个数组
int a[5],b[2][3];
a的类型为int [5],b的类型为int [2][3];int a[5],b[2][3];
&a的类型为 int (*)[5],&b的类型为int (*)[2][3],即&数组名的类型为指向该数组的指针,不是指向数组第一个元素的指针。
int *p=a;//将a的类型int [5]隐式转化为int *类型
int *p=&a[0];//&a[0]的类型为类型为int *
int (*p)[5]=&a;
int (*p)[2][3]=&b;
int (*p)[3]=b;//b的类型为int (*)[3]
printf("%p %p",a,&a);//输出值相等
a和&a不是相同的东西,虽然本质上二者的地址值是一样的,但是类型不一样,就决定他们代表不同的意义。
转载地址:http://blog.csdn.net/tianshuai11/article/details/7956982