先从用指向行的指针操作二维数组说起:
inta[][2]={1,2};
int(*p)[2]=NULL;
p=a;
接下来可以用p来代替a访问二维数组,如p[0][0];
为什么不能用 int *p[2];呢?首先,比如int b[2],此时b是一个数组,且是个指针常量,是不能赋值的,同样p也是个指针常量,不能用p=a来赋值。
但我们可以这样:
int a[][2]={1,2,3,4};
int *p[2];
for(int i=0;i<2;i++){
p[i]=a[i];
}
此时就可以用p代替a来访问了,如p[0][0]; 要说明的是p是个指针常量,指向&p[0],但要注意此时p和a是不一样的,所指向的地址不一样,p指向&p[0],而a指向a[0]。已经验证过
另外很重要的一个说明:定义了变量,那么编译器里就会存在该变量的地址,比如:我们定义了int t=10;那么编译器里就存在t的一个地址,且可用&t获得,但是&&t是非法的不存在。。。编译器里只存了我们所定义的变量的地址,比如:int a=10;int *b=&a;那么&b又是合法的了。