C 需要了解二维阵列的输出
这是密码 运行这个C 需要了解二维阵列的输出,c,arrays,c-strings,pointer-arithmetic,C,Arrays,C Strings,Pointer Arithmetic,这是密码 运行这个 #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
#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;
}
#包括
char*c[]={“geksquick”、“MCQ”、“TEST”、“quick”};
字符**cp[]={c+3,c+2,c+1,c};
字符***cpp=cp;
int main()
{
cpp++;
printf(“%s”,cpp[0][0]);//测试
printf(“%s”,cpp[-1][-1]);//测试
返回0;
}
printf()的输出都是TEST。为什么会这样?当我执行cpp++时,指针移动到c+2。所以我知道cpp[0][0]将在“测试”的开始,这就是为什么它是打印测试。
有人能给我解释一下cpp[-1[-1]吗?最初指针
cpp
指向数组的第一个元素cp
char ***cpp = cp;
在此声明之后
cpp++;
指针cpp
指向数组cp
的第二个元素
cpp[-1]
给出数组的第一个元素cp
注意表达式cpp[-1]
的计算如下
*( cpp - 1 )
因此实际上这两种说法
cpp++;
及
可以认为类似于*((cpp+=1)-1)
,如果在不增加指针的情况下写入cpp[0]
,则具有相同的效果
数组cp
的此(第一个)元素包含值c+3
,该值是指向数组c的最后一个元素的指针
因此cpp[-1][-1]
给出数组c
最后一个元素之前的元素,该元素是指向字符串literal的第一个字符的指针“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 ] <代码>包含“代码>测试”<代码>,在它是指向“代码> >测试”<代码>的第一个元素的指针时,因此打印它打印“代码>测试”<代码> > < /p>在C++中,不应将字符串文字分配给<代码> char *<代码> <代码> CPP [ -1 ] [-1 ]。是未定义的行为,因为
-1
超出了数组的边界。对不起,这是一种C语言。我也不知道您是否习惯Python,但在C索引中[-1]不是数组的后部,如果这是你正在尝试的DOBTW,这是你需要理解的东西,如果你想成为A,对于任何其他的东西,你应该编写更容易编写、阅读和理解的代码。我们可以把CPP++和CPP[-1 ]看作CPP(0)吗?这是我不理解的指针。@ AkHeleSeHang-War考虑X+ 1到1。结果是什么?它实际上与CPP++-1相同,因为CPP++的结果是CPP+1。我假设了别的东西。P:谢谢。我明白了。
printf("%s ", cpp[-1][-1])