为什么指向字符串文字数组的指针会反转索引顺序?

时间:2014-08-25 16:08:28

标签: c++ c arrays pointers

好的,所以我有一个字符串文字数组

char* messages[] = {
    "t",
    "123",
    "test3",
    "test4",
    "test5", 
    "test1000"
};

我想制作一个指向数组的指针,我这样做:

char *(*p)[6] = &messages;

我想知道为什么会这样

p[0][3];

返回" test4"什么时候

messages[3];

返回" test4"

p[1][3]; 

返回seg错误。 我对这种行为感到非常困惑,我希望你们中的一个能够解释它。

2 个答案:

答案 0 :(得分:1)

该行

char *(*p)[6] = &messages;

p定义为指向指向char 的6个指针数组的指针。

这意味着:

*p == messages
p[0] == messages

(*p)[3] == messages[3]
p[0][3] == messages[3]

但是,p[1]无效,因为p不是数组。如果您使用p[1],您将看到未定义的行为(分段违例错误就是这种行为)。

答案 1 :(得分:0)

在您的代码中p是指向整个数组的指针。 p[0]相当于*p,它就是数组本身。期望(*p)[3] == p[0][3] == messages[3],这只是一般指针的语义。 p[1][3]导致分段错误,因为您使用指向单个对象messages的指针,就好像它是一个数组,并索引不存在的第二个元素。