c - 需要理解二维数组的输出

标签 c arrays c-strings pointer-arithmetic

这是代码 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/

相关文章:

c - c中函数内的函数引用

c - 叉 TreeMap

javascript - Google 应用程序脚本 - 遍历电子表格中的行

c++ - 在c++中添加两个c字符串

c - 为什么这个非空终止字符串被正确打印

c++ - 使用 Win32/MFC 将文件位置传递给外部进程

c - 这两种 volatile 限定词的用法都是多余的吗?

javascript - 如何获取数组中的所有唯一对象(具有两个值)?

javascript - 将一个数组作为参数进行排序

在C中组合两个字符串