以下代码将输出显示为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);
}
请帮助。
答案 0 :(得分:2)
让我们分解一下……您有*(*C+1)+1
。让我们找到C对于初学者的价值并逐步解决它:
C = B;
B的数组类型被省略为char***
,C现在指向B的第一个元素
++C;
C加1,现在指向B的第二个元素
(*C+1)
的评估:
*C
等效于B[1]
,并为您提供指针A+1
。您将其加1,因此(*C+1)
等效于A+2
。
*(*C+1)+1
的评估:
根据上面的解释,现在等同于*(A+2) + 1
,即A[2] + 1
。指向字符串“ AVA”。
最后,请注意样式:永远不要这样写代码!