| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 815 人关注过本帖
标题:[求助]请教关于调用函数fun (i,++i);的问题
只看楼主 加入收藏
八宝周
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-4-19
收藏
 问题点数:0 回复次数:8 
[求助]请教关于调用函数fun (i,++i);的问题

小弟初学c++,在教程里(谭浩强编的c++)看到一个问题十分困惑,请高手指教,谢谢!
以下是教程里的原文:
“例如,若变量i的值为3,有以下函数调用:
fun(i,++i);
如果按自左至右的顺序求实参的值,则函数调用相当于fun(3,4),若按自右至左的顺序求实参的值,则相当于fun(3,3)。许多c++系统(例如Visual C++和GCC)是按自右至左的顺序求值的。”

为什么按自右至左的顺序求值就是fun(3,3)呢,能不能写个代码体现一下?

搜索更多相关主题的帖子: fun 函数 谭浩强 顺序 
2007-04-19 09:25
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

这不是自右向左的顺序问题,这是个,(逗号)运算法则。
比如(a,b)a,b分别为表达式,先计算a,然后运算结果暂存,再运算b,整个表达式的结果由b决定。

所以
void f(int i,int j){
cout << i << "\t" << j << endl;
}


int a = 3;
f(a,++a);

输出结果为 4,4。


Fight  to win  or  die...
2007-04-19 09:58
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
二楼错了,这个地方只是参数分隔符,并不是什么逗号运算符

楼主怎么说自右向左求值的时候就是fun(3,3)啊,应该是fun(4,4)吧,是不是看错了

雁无留踪之意,水无取影之心
2007-04-19 17:14
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 

这本书
VC++6.0 :
#include<iostream>
using namespace std;
int f(int i,int j)
{
cout<<i<<" "<<j<<endl;
return 0;
}

int main()
{
int i=3,j=3;
// f(i,++i); //输出 4 4
f(i,i++); //输出 3 3
system("pause");
return 0;

}

DEV C++ :
#include<iostream>
using namespace std;
int f(int i,int j)
{
cout<<i<<" "<<j<<endl;
return 0;
}

int main()
{
int i=3,j=3;
f(i,++i); //输出 4 4
// f(i,i++); //输出 4 3
system("pause");
return 0;

}
VC 和 GCC的法则不一样吧


Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2007-04-19 18:11
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 

“例如,若变量i的值为3,有以下函数调用:
fun(i,++i);
如果按自左至右的顺序求实参的值,则函数调用相当于fun(3,4)
若按自右至左的顺序求实参的值,则相当于fun(3,3)。


这话有待研究.

[此贴子已经被作者于2007-4-19 18:29:20编辑过]


Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2007-04-19 18:26
游乐园
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:671
专家分:0
注 册:2006-11-1
收藏
得分:0 

应该和编译器的执行顺序有关了

fun(i,++i); //从左到右 肯定是 fun(3,4)了 而从右到左是fun(4,4) 不应该有fun(3,3)的情况发生吧


unicorn-h.spaces. ◇◆ sava-scratch.spaces.
2007-04-19 18:58
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 

同上
与平台有关
不过,想知道规定的是什么样
用DEV测试
但是最好别写这些'小聪明'的程序


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2007-04-19 20:09
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
才把dev-cpp装好,弄了一哈,还可以!

只是没了熟悉的辅助功能,还有它的调试和自动缩进不好用啊!

用dev-cpp的多不?

Fight  to win  or  die...
2007-04-19 23:24
八宝周
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-4-19
收藏
得分:0 
谢谢各位,大致明白其中的意思了
2007-04-22 15:02
快速回复:[求助]请教关于调用函数fun (i,++i);的问题
数据加载中...
 
   



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

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