C 输出不匹配
下面的代码将输出为C 输出不匹配,c,pointers,C,Pointers,下面的代码将输出为AVA,但我不明白为什么?在我看来,输出应该是代码> + +>代码>,因为作为C=B,它指向的是存储在 A+ 2、A+1、A+3、A/COD>的字符串,而在代码> ++C之后,它将从 A+1 < /C> >开始,这是C++。但它指向JAVA #include <stdio.h> int main() { char * A[] = {"C", "C++", "JAVA", "PHP"}; char **B[] = {A+2, A+1, A+3, A}, *
AVA
,但我不明白为什么?在我看来,输出应该是代码> + +>代码>,因为作为C=B,它指向的是存储在<代码> A+ 2、A+1、A+3、A/COD>的字符串,而在代码> ++C<代码>之后,它将从<代码> A+1 < /C> >开始,这是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);
}
#包括
int main(){
char*A[]={“C”,“C++”,“JAVA”,“PHP”};
字符**B[]={A+2,A+1,A+3,A},***C;
C=B;
++C;
printf(“%s”,*(*C+1)+1);
}
请帮忙。让我们把它分解一下。。。你有
*(*C+1)+1
。让我们先找出C的值,然后进行研究:
C=B代码>
B的数组类型被省略为achar***
,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”
最后,关于风格的注意事项:永远不要这样写代码 让我们把它分解一下。。。你有
*(*C+1)+1
。让我们先找出C的值,然后进行研究:
C=B代码>
B的数组类型被省略为achar***
,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”