输出不匹配

时间:2018-11-06 02:18:36

标签: c pointers

以下代码将输出显示为AVA,但我无法理解为什么?我认为输出应为++,因为当C = B时它将指向存储在A+2 , A+1 , A+3 , A的字符串,在++C之后它将从A+1指向,这是C ++。但是它指向JAVA

#include <stdio.h>
int main() {
   char * A[] = {"C", "C++", "JAVA", "PHP"};
   char **B[] = {A+2, A+1, A+3, A}, ***C;
   C = B;
   ++C;
   printf("%s", *(*C+1)+1);
}

请帮助。

1 个答案:

答案 0 :(得分:2)

让我们分解一下……您有*(*C+1)+1。让我们找到C对于初学者的价值并逐步解决它:

  1. C = B;

    B的数组类型被省略为char***,C现在指向B的第一个元素

  2. ++C;

    C加1,现在指向B的第二个元素

  3. (*C+1)的评估:

    *C等效于B[1],并为您提供指针A+1。您将其加1,因此(*C+1)等效于A+2

  4. *(*C+1)+1的评估:

    根据上面的解释,现在等同于*(A+2) + 1,即A[2] + 1。指向字符串“ AVA”。

最后,请注意样式:永远不要这样写代码!