数组指针域指针数组

 看c++primer第四章的数组与指针里面有一个实例:int a[4][5];  int (*p)[5] = a; 发现没有看懂 按照书上的说话 这是定义一个指向有5个元素的数组的指针 想了一下 发现有点晕 没有怎么明白 查了一些资料 对于这样的问题  网上给出了这样的解答 p左边的*在这里不是取值运算符,而是一个声明符,它指出p是一个指针。而()括号是不能去掉的,如果去掉了,由于[]运算符优先级比*高,p就会先跟[]结合,这样p就变成了一个指针数组,而不是指向数组的指针 仔细想想还真的是这样  这也解决了我先前在上c语言的时候的问题 当时我就不是很明白 为什么int **p 不能直接赋值a[4][6]的地址a  按照解释 a是指针的指针 p也是指针的指针 实际上 a还是一个一维指针 只不过a这个指针指向的内存单元中存储的数据又是一个有6个元素的指针 也就是说 a指向的内存单元的数据类型应该是int*[6] 而int **p指向的内存单元的类型是int* 这两个是不相同的 因此不能够赋值

posted @ 2012-03-02 17:58  Frozenxia  Views(169)  Comments(0)    收藏  举报