需要了解二维数组的输出
Output of a 2-d array needs to be understood
这是代码
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] 解释一下吗?
最初指针cpp
指向数组的第一个元素cp
。
char ***cpp = cp;
这条语句之后
cpp++;
指针cpp
指向数组的第二个元素cp
。所以这个表达式
cpp[-1]
给出数组的第一个元素cp
注意表达式cpp[-1]
的计算方式类似于
*( cpp - 1 )
因此实际上这两个语句
cpp++;
和
cpp[-1]
可以被认为类似于 *( ( cpp += 1 ) - 1 )
,如果写入 cpp[0]
而不增加指针 cpp
,则具有相同的效果。
数组的这个(第一个)元素 cp
。包含值 c+3
,它是指向数组 c.
最后一个元素的指针
所以cpp[-1][-1]
给出数组c
最后一个元素之前的元素,它是指向字符串文字第一个字符的指针"TEST"
。
因此调用 printf 输出字符串文字
printf("%s ", cpp[-1][-1])
另请记住,在提供的代码中没有二维数组。所有数组 c
和 cp
都是一维指针数组。
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"
.
这是代码 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] 解释一下吗?
最初指针cpp
指向数组的第一个元素cp
。
char ***cpp = cp;
这条语句之后
cpp++;
指针cpp
指向数组的第二个元素cp
。所以这个表达式
cpp[-1]
给出数组的第一个元素cp
注意表达式cpp[-1]
的计算方式类似于
*( cpp - 1 )
因此实际上这两个语句
cpp++;
和
cpp[-1]
可以被认为类似于 *( ( cpp += 1 ) - 1 )
,如果写入 cpp[0]
而不增加指针 cpp
,则具有相同的效果。
数组的这个(第一个)元素 cp
。包含值 c+3
,它是指向数组 c.
所以cpp[-1][-1]
给出数组c
最后一个元素之前的元素,它是指向字符串文字第一个字符的指针"TEST"
。
因此调用 printf 输出字符串文字
printf("%s ", cpp[-1][-1])
另请记住,在提供的代码中没有二维数组。所有数组 c
和 cp
都是一维指针数组。
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"
.