好的,所以我有一个字符串文字数组
char* messages[] = {
"t",
"123",
"test3",
"test4",
"test5",
"test1000"
};
我想制作一个指向数组的指针,我这样做:
char *(*p)[6] = &messages;
我想知道为什么会这样
p[0][3];
返回" test4"什么时候
messages[3];
返回" test4"
也
p[1][3];
返回seg错误。 我对这种行为感到非常困惑,我希望你们中的一个能够解释它。
答案 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
的指针,就好像它是一个数组,并索引不存在的第二个元素。