鱼C论坛

 找回密码
 立即注册
查看: 3582|回复: 7

新手求问!

[复制链接]
发表于 2011-9-23 13:29:57 | 显示全部楼层 |阅读模式

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

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

x
请问,大家
#include "stdio.h"
void main()
{
int a=3,b=6,c=8,x,y;
y=(x=a+b),(b+c);
printf("y=%d,x=%d\n",x,y);
}
这个代码中为什么编译结果显示xy都是9?教程中讲的不是y应该取决于最后一个狮子(b+c)么?
还有这个代码
#include "stdio.h"
void main()
{
int q,i=5;
q=(++i)+(++i)+(++i);
printf("%d\n",q);
}
这个代码中q为什么等于22?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-23 14:04:06 | 显示全部楼层
第一个问题一句话解释:C语言中逗号运算符优先级最低!
第二个问题有点复杂:在VC编译器中先将i自加1两次即i=7,然后再将他们相加得14并存在寄存器中,此时i=7,再将i自加1,然后再与寄存器中的14相加得22赋给p;
不同的编译器结果可能不一样,用TC2.0就得到24,所以这个不用太在意。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-23 14:06:37 | 显示全部楼层
其实LZ可以多研究下运算优先的那个表,你就明白了。。至于第二个问题。。实在是无意义~不同的编译器算出来的结果不同...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-24 14:55:10 | 显示全部楼层
一、代码可以这样
#include "stdio.h"
void main()
{
int a=3,b=6,c=8,x,y;
y=((x=a+b),(b+c));
printf("y=%d,x=%d\n",x,y);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-25 18:25:55 | 显示全部楼层
printf("y=%d,x=%d\n",x,y);
你这一句有问题:后面的x和y弄反了,自然不正确。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-25 22:32:23 | 显示全部楼层
第一个问题,
因为赋值运算符的优先级比逗号运算符的优先级高, 所以(x=a+b)的值就先赋值给了y; 如果要y为(b+c)的值的话,那就应该写为y=((x=a+b),(b+c));
我也是新手,以上为个人理解...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-26 14:27:27 | 显示全部楼层
第一个问题同楼上
第二个:首先++i,i=6;然后再++i,i=7,同时第一个++i后,并没有把i值取出放到累加器,而是第二个i之后,才把i取出放到累加器,然后又取一次i与累加器中的数相加,就是i+i=14了,最后再++i,i=8,14+8=22,编译器是这样计算的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-9 10:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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