变量改变后,什么时候对其后边的使用会产生影响
#include<stdio.h>int x={1,2,3,4,5};
struct
{
int a;
int *b;
}*k,t={100,&x,200,&x,300,&x};
main()
{
k=t;
printf("%d\t",++(++k)->a);
printf("%d\t",*(*k).b);
// printf("%d\t%d\n",++(++k)->a,*(*k).b);
}
如果运行红色的部分得到的结果就为201,3 如果运行蓝色的部分得到的结果就为201,1
我想问问为什么蓝色部分中,++(++k)->a时k的值改变了,但是*(*k).b中的k确不受影响。而写成红色那样就会受影响了。
这个问题的输出在不同的C语言编译器下是不同的,所以建议是你自己千万不要写出这样的代码。至于解决方案,与其去想这些无聊的问题,还不如多安装几个版本的C语言编译器,证明它在不同编译器下输出是不同的。 我记得以前做过类似的题。是因为printf函数会先执行*(*k)。b ,然后再执行++(++k)那个。蓝色的就是那样。而红色的因为是两个printf,所以先++,后*(*k)。 谢谢上面的回答
页:
[1]