| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4677 人关注过本帖
标题:[分享]一个scanf() 函数引发的思考
只看楼主 加入收藏
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 

...

[此贴子已经被作者于2007-3-16 21:15:20编辑过]


雁无留踪之意,水无取影之心
2007-03-16 21:09
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 

我先想会儿再说

[此贴子已经被作者于2007-3-16 21:16:20编辑过]


雁无留踪之意,水无取影之心
2007-03-16 21:14
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
有没有人见过printf或scanf函数的源代码

雁无留踪之意,水无取影之心
2007-03-16 21:24
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
以下是引用moonwalker在2007-3-16 21:05:15的发言:
看看下面这个逗号表达式的程序:
int main()
{
int a=0,b=0;
int c,d;
c=(a++,a++);
d=(b++,b++,b++);
printf("c=%d\n",c);
printf("d=%d",d);
}
结果是c=1,d=2
显然是先执行表达式1,再执行表达式2
你可以看看谭浩强那本书P64(第二版)有说明你那种不是逗号表达式
只是printf函数参数的分隔符
逗号运算号是从左到右的结合顺序,但在函数调用这种特殊情况下是从右到左的.
你有没有更好的解释说明这个问题.

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-03-16 21:37
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 
以下是引用neverTheSame在2007-3-16 21:37:44的发言:
逗号运算号是从左到右的结合顺序,但在函数调用这种特殊情况下是从右到左的.
你有没有更好的解释说明这个问题.

这个我是没有必要解释的,因为这属于概念的混淆
你是强行认为那是一个逗号表达式
然后把那个表达式的功能加在逗号表达式头上
这不是强(表达式)所难么?


“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2007-03-16 21:47
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 

一种运算符不可能在不同的情况下出现不同的结合方向,那还叫语言?

只能说在调用函数时,从右边开始运算,而不能说是所为的逗号运算符的作用


雁无留踪之意,水无取影之心
2007-03-16 21:48
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
我只能这样理解了,我都快疯了,可能你也一样

[此贴子已经被作者于2007-3-16 21:50:22编辑过]



雁无留踪之意,水无取影之心
2007-03-16 21:49
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 
现在用反证法,假设如你所说,就是一个函数调用下的逗号表达式
请给出调用时的形参,实参

“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2007-03-16 21:50
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
int fun(int a,int b)
{
printf("a=%d\nb=%d",a,b);
}
int main()
{
int a=0;
fun(a++,a++);
}


这是一个很好的例子,

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-03-16 21:54
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 
好的,暂且认为你的printf("a=%d\nb=%d",a,b);中a,b是逗号表达式
逗号表达式的定义是:
先求表达式1,再求表达式2,整个表达式的值是表达式2的值。
现在的状态
a=0;
表达式1:a++;
表达式2:a++;
现在开始求解:
表达式1执行后,a=1;
表达式2执行后,a=2;
表达式2的值是2
printf语句的第一个%d应该输出逗号表达式的值(因为编译器要尽可能多的编译合法的语法),
所以第一个数应该是2,你看你的输出是么?

“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2007-03-16 22:28
快速回复:[分享]一个scanf() 函数引发的思考
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018339 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved