小编Mis*_*dro的帖子

理解C指针,数组和负索引

我正在尝试学习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 …

c arrays pointers

9
推荐指数
1
解决办法
158
查看次数

标签 统计

arrays ×1

c ×1

pointers ×1