我正在尝试学习C中的指针,并为此目的进行测验.这是一个问题:
#include <stdio.h>
char *c[] = {"GeksQuiz", "MCQ", "TEST", "QUIZ"};
char **cp[] = {c+3, c+2, c+1, c};
char ***cpp = cp;
int main()
{
printf("%s ", **++cpp);
printf("%s ", *--*++cpp+3);
printf("%s ", *cpp[-2]+3);
printf("%s ", cpp[-1][-1]+1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该行的结果:
printf("%s ", *cpp[-2]+3);
Run Code Online (Sandbox Code Playgroud)
困惑我,但让我一步一步解释,我是如何理解的.
char *c[]- 是char的指针数组.char **cp[]- 是指向char的指针数组(我认为这是一个*c[]反向顺序的包装器).char ***cpp- 是指向指向char的指针的指针(我认为这是一个用于**cp[]执行位置修改的包装器).**++cpp- 因为cpp指向cp,然后++cpp将指向cp+1哪个c+2,所以将打印双重引用TEST …