鱼C论坛

 找回密码
 立即注册
查看: 1198|回复: 3

变量改变后,什么时候对其后边的使用会产生影响

[复制链接]
发表于 2014-10-16 14:47:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int x[5]={1,2,3,4,5};
struct
{
        int a;
        int *b;
}*k,t[3]={100,&x[0],200,&x[2],300,&x[4]};
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确不受影响。而写成红色那样就会受影响了。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-16 16:29:45 | 显示全部楼层
这个问题的输出在不同的C语言编译器下是不同的,所以建议是你自己千万不要写出这样的代码。至于解决方案,与其去想这些无聊的问题,还不如多安装几个版本的C语言编译器,证明它在不同编译器下输出是不同的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-16 22:40:08 | 显示全部楼层
我记得以前做过类似的题。是因为printf函数会先执行*(*k)。b ,然后再执行++(++k)那个。蓝色的就是那样。而红色的因为是两个printf,所以先++,后*(*k)。  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-18 16:46:17 | 显示全部楼层
谢谢上面的回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 03:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表