这是代码 https://ide.geeksforgeeks.org/8bYOzDDC9U运行这个
#include <stdio.h>
char *c[] = {"GeksQuiz", "MCQ", "TEST", "QUIZ"};
char **cp[] = {c+3, c+2, c+1, c};
char ***cpp = cp;
int main()
{
cpp++;
printf("%s", cpp[0][0]); // TEST
printf("%s ", cpp[-1][-1]); // TEST
return 0;
}
两个 printf() 的输出都是 TEST。为什么会这样呢?当我执行cpp++时,指针移动到c+2。所以我知道 cpp[0][0] 将位于“TEST”的开头,这就是它打印 TEST 的原因。 有人可以解释一下 cpp[-1[-1] 吗?
最佳答案
char ***cpp = cp;
初始化cpp
指向cp
的第一个元素,即cp [0]
.
在cpp++
之后,cpp
指向cp[1]
。那么cpp[-1]
引用cp[0]
。
cp[0]
包含 c+3
,它是指向 c[3]
的指针。因此 cp[0][-1]
引用 c[2]
。
c[2]
包含 "Test"
,从某种意义上说,它是指向 "Test"
第一个元素的指针,因此打印它会打印 "Test"
.
关于c - 需要理解二维数组的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61253328/