int *p;int (*p)[10];int *p[10]
1.
把声明中指针变量的名字去掉就可以得到指针的类型,比如int *p,去掉p,指针类型为int *,int (*p)[10]指针类型为int (*)[10]注意,int (*)[10]代表的是一个指向含有是个元素的数组.而int *p[10],指针类型为int *[10],所代表的含义是一个含有10个指针元素的数组.
2.
需要注意以下取地址符号&的含义
int *p,a;
p=&a;
通过1例子中我们知道只需要去掉变量名字就可以得到指针的类型,我们已经知道int *p类型是int *,a为int 类型,接下来这个结论很有用,就是没次取地址&,就相当于把a的地址给了p,相等的条件必须是p和&a的类型一致,则&a的类型应该是int *,可以看出一次&符号就相当于在a的类型之上加了一个*.以后都可以这样用.
看下面代码可以深入理解一下上面表达的意思
#include "iostream"
using namespace std;
int main(){
int a[10]={1,2,3,4};//类型int [10]
int (*p)[10];//p为一个指向10个元素的数组,类型int (*)[10]
p=&a;//&a类型为int (*)[10],相当于在a类型基础上增加了(*)
cout<<p<<endl;
cout<<&a[0]<<endl;//可以看出&a[0]和p输出一样,但是不能p=&a[0]因为&a[0]类型是int *
// cout<<(*p)[0];
int *q[10];//q为一个含10个指针元素的数组
int *z;
q[1]=z;
int (*p2)[10];
int a2[10][10];
p2=a2;
// *p[2]=2;
}