| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 818 人关注过本帖
标题:编程问题求助
只看楼主 加入收藏
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
结帖率:80%
收藏
已结贴  问题点数:10 回复次数:7 
编程问题求助
#include<stdio.h>
int f(int a,int b)
{
    int c;
    if(a>b) c=1;
    else if(a==b) c=0;
    else c=-1;
    return (c);
}

void main()
{
int i=2,p;
p=f(i,i++);
printf("%d\n",p);
i=2;
p=f(i,++i);
printf("%d\n",p);
i=2;
p=f(i++,i);
printf("%d\n",p);
i=2;
p=f(++i,i);
printf("%d\n",p);
i=2;
p=f(i++,i++);
printf("%d\n",p);
i=2;
p=f(++i,++i);
printf("%d\n",p);
}
程序如上
程序输出是:
0
0
0
1
0
1
请帮忙解释下这值是怎么出来的?
程序环境是vc++6.0
搜索更多相关主题的帖子: 编程 void return 
2010-04-20 11:04
b001lcp
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:45
专家分:157
注 册:2010-3-17
收藏
得分:0 
LZ的疑问无法在于,i++和++i的区别
i=2
i++ 先用i=2做处理,处理完毕后i再执行++操作,即i=i+1=3:
     在LZ的程序中,作为i=2入参传给f函数,实际上传入的值为i=2,f函数处理完返回后,i才计算++, 即执行完f函数调用后 i=i+1=3
++i 先执行++操作即i=i+1=3,再用i=3的做处理:
    在LZ的程序中,作为入参传给f函数,实际上传入的值为i=i+1=3

还有在函数中,函数入参压栈是先右后左的

详细如下:
int i=2,p;
p=f(i,i++);//p=f(2,2);执行完后i=3
printf("%d\n",p);
i=2;
p=f(i,++i);//p=f(2,3);执行完后i=3
printf("%d\n",p);
i=2;
p=f(i++,i);//p=f(2,2);执行完后i=3
printf("%d\n",p);
i=2;
p=f(++i,i);//p=f(3,2);执行完后i=3
printf("%d\n",p);
i=2;
p=f(i++,i++);//p=f(2,2);执行完后i=4
printf("%d\n",p);
i=2;
p=f(++i,++i);//p=f(4,3);执行完后i=4
printf("%d\n",p);
2010-04-20 13:02
b001lcp
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:45
专家分:157
注 册:2010-3-17
收藏
得分:7 
int i=2,p;
p=f(i,i++);//p=f(2,2);执行完后i=3
printf("%d\n",p);
i=2;
p=f(i,++i);//p=f(3,3);执行完后i=3
printf("%d\n",p);
i=2;
p=f(i++,i);//p=f(2,2);执行完后i=3
printf("%d\n",p);
i=2;
p=f(++i,i);//p=f(3,2);执行完后i=3
printf("%d\n",p);
i=2;
p=f(i++,i++);//p=f(2,2);执行完后i=4
printf("%d\n",p);
i=2;
p=f(++i,++i);//p=f(4,3);执行完后i=4
printf("%d\n",p);

具体看这个,上面第红色的注释有点问题
2010-04-20 13:04
ubuntulover
Rank: 4
等 级:业余侠客
帖 子:77
专家分:256
注 册:2010-4-9
收藏
得分:2 
楼主这个程序并不能说明很多问题。在不同的编译器下这个程序的运行结果是不一样的。因为C语言标准并没有规定向函数传递参数时,参数的计算次序。是从左往右啊,还是从右往左。不过根据楼主的结果,看楼上的解释也可以了
2010-04-20 13:46
日的起烟烟
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:137
专家分:129
注 册:2010-2-27
收藏
得分:1 
这个问题明白了就可以了··

以后写代码尽量写得移植性好些
2010-04-20 13:48
honey536
Rank: 2
来 自:山东
等 级:论坛游民
帖 子:68
专家分:76
注 册:2010-4-20
收藏
得分:0 
在什么环境下运行的?turboc2.0 \turboc++3.0还是别的编译环境?不同的编译器下这个程序的运行结果是不一样!!
2010-04-21 08:20
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:0 
回复 3楼 b001lcp
谢谢了

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2010-04-21 08:53
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:0 
回复 4楼 ubuntulover
恩,这我知道,只是偶尔看见这东西想弄明白而已

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2010-04-21 08:54
快速回复:编程问题求助
数据加载中...
 
   



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

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