C ++多维数组和指针名称包围

时间:2011-12-03 23:06:44

标签: c++ pointers multidimensional-array

已经有很多关于C ++ Multidimension数组问题的问题,虽然没有A)完全解释了我在这里要求的内容或B)也许我只是不理解它。

我的问题:

int (*ip)[4];

我遇到的问题是了解在这种情况下在* ip周围添加括号的原因。看多维数组:

int ia[3][4];
int *ip = &ia[2];
int *ip2[4] = &ia[2];
int (*ip3)[4] = &ia[2];

ip,ip2和ip3都意图指向位置ia [2]的数组的第一个元素。

  1. ia [2] 只是指向该数组的第一个元素的指针,因此& ia [2] 是该指针的地址?正确的吗?
  2. 在我看来,可以使用 ip ,因为它可以像char *一样工作......是吗?没有?
  3. 对我来说 ip2 是不正确的。我有意义的是, ip2 是一个指向数组的指针数组,当我想要的是一个指向int数组的指针时。
  4. 我知道 ip3 是正确的。为什么?因为这本书是这么说的。真的是这样的。我不明白包围的重要性。
  5. 那么括号如何改变事物呢?我真的在这里做了一个概念性的解释,所以我将来可以理解并重用这个概念。

    再次感谢大家的时间,我还是新来的,所以如果有任何我可以做的改进我的问题请告诉我。

2 个答案:

答案 0 :(得分:3)

  1. 第一个:

    int *ip = &ia[2];
    

    无效。 &ia[2]int[4]的地址,因此其类型为int (*)[4],因此无法用于初始化int *。但是,你可以这样写:

    int *ip = ia[2];
    

    现在可以满足您的期望。

  2. 不,见上文。

  3. 确实

  4. 这是正确的,因为这是正确的语法。从中间开始,向外工作。 (*ip3)表示ip3是指向某事物的指针。向外工作时,它指向的是int[4]

答案 1 :(得分:0)

括号用于指示谁是指针。

int *ip1[4];
int (*ip2)[4];

ip1是指向int的4个指针的数组 ip2是指向4 int个数组的指针。