LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: 鸟儿

刚开始学c,今天有道习题弄不懂!

[复制链接]
发表于 2005-5-8 21:56:27 | 显示全部楼层
Post by bigcat00
c = ( a -= a - 5 ), ( a = b, b + 3);
汗…………我就纳了闷了,怎么有朋友说取逗号最后的一个表达式的值???C明明规定逗号表达式是取第一个逗号前面的表达式的值,放到这里,其实就是c=(a-=a-5),扩展开来看:①a-5=-5;
②a=a-(-5),其实就是a=0-(-5),0-(-5)等于多少??我特意打开计算器算了一下,等于5,所以最后a的值就是5。


我晕死。你看的什么书说C规定逗号运算符取第一个表达式的值?撕了!
我前面那个程序就用了逗号运算符:

  1.     while (addrlen = sizeof (union __sa_union), (n = recvfrom(sockfd, buf,
  2.                             __BUFSIZE, 0, &un.sockaddr, &addrlen)) >= 0)
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-5-8 22:08:36 | 显示全部楼层
我晕死。你看的什么书说C规定逗号运算符取第一个表达式的值?撕了!
哥们儿哪…………我是说放这个楼主这个表达式里看,变量c实际上取的就是第一个表达式的值哇。
回复 支持 反对

使用道具 举报

发表于 2005-5-8 22:25:26 | 显示全部楼层
Post by bigcat00
我晕死。你看的什么书说C规定逗号运算符取第一个表达式的值?撕了!
哥们儿哪…………我是说放这个楼主这个表达式里看,变量c实际上取的就是第一个表达式的值哇。


总之这个题相当于:
(c = ( a -= (a - 5))), (( a = b), (b + 3));
无聊到死的题目。
回复 支持 反对

使用道具 举报

发表于 2005-5-9 11:03:03 | 显示全部楼层
赞    
回复 支持 反对

使用道具 举报

发表于 2005-5-9 21:39:27 | 显示全部楼层
c = ( a -= a - 5 ), ( a = b, b + 3);

题解应该是这样吧:
c = ( a = a-(a - 5) )     最后a=5,c=5;
(a=b,b+3)                   最后a=b=0;b+3后因为没有赋值,所以还是b=0

-------------------------------------------------------------------------------------------

运算这道题应该会更清楚逗号运行表达式的规则吧:
x = ( y = 3, (z = ++y + 2) + 5)    最后x=11;

-------------------------------------------------------------------------------------------

这个看不明白:
(x=8*2,x*4),x*2 /*整个表达式的值为128,x的值为16*/
(x=8*2,x*4)      最后是x=16;
但x*2怎么会是64*2而不是16*2呢?x的值明明没有改变!!
回复 支持 反对

使用道具 举报

发表于 2005-5-9 22:26:38 | 显示全部楼层
Post by firstddf
 逗号运算符

  C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式。

  其一般形式为: 表达式1,表达式2 其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。

void main(){
 int a=2,b=4,c=6,x,y;
 y=(x=a+b),(b+c);
 printf("y=%d,x=%d",y,x);
}
a<--2,b<--4,c<--6,x<--0,y<--0
x<--a+b,y<---b+c  

  本例中,y等于整个逗号表达式的值,也就是表达式2的值,x是第一个表达式的值。对于逗号表达式还要说明两点:

  1.逗号表达式一般形式中的表达式1和表达式2 也可以又是逗号表达式。例如: 表达式1,(表达式2,表达式3) 形成了嵌套情形。因此可以把逗号表达式扩展为以下形式: 表达式1,表达式2,…表达式n 整个逗号表达式的值等于表达式n的值。

  2.程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。

  3.并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符


你该把程序运行一下再发上来啊,这个怎么可以呢.C语言中的运算符的运算顺序是算关逻赋逗,很明显了,你的程序应该是把 y<---x=a+b了
回复 支持 反对

使用道具 举报

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

本版积分规则

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