主题:这个程序输出什么结果!意外!
jidkui
[专家分:0] 发布于 2011-07-16 06:51:00
#include <stdio.h>
int increment(int x)
{
x = x + 1;
}
int main()
{
int i = 1, j = 2,a,b;
a=increment(i);
b=increment(j);
printf("i=%d\nj=%d\n",a,b);
return 0;
}
你觉得这个程序会输出什么结果?
回复列表 (共10个回复)
沙发
bruceteen [专家分:42660] 发布于 2011-07-16 08:21:00
SN
int increment(int x)
{
x = x + 1;
} 连个return都没有
板凳
jidkui [专家分:0] 发布于 2011-07-16 09:33:00
定义函数,也要加return的吗?上面代码是我编译通过了的!
改成下面这样舒服点,但是效果一样:
#include <stdio.h>
int increment(int x)
{
x = x + 1;
}
int main()
{
int i = 1, j = 2;
printf("i=%d\nj=%d\n",increment(i),increment(j));
return 0;
}
输出结果:i=1 j=2,而不是i=2,j=3
请高手解惑!
3 楼
cw95440894 [专家分:30] 发布于 2011-07-16 13:32:00
能编译通过?用什么编译的?
1、#include <stdio.h>
int increment(int x)
{
x = x + 1;
}
你在函数定义的时候制定返回int值,在函数出口处必须用return返回一个值,可以是一个变量或者一个常数,有可能因为某些编译器的缺陷或者缺省状态导致编译通过,但很不推荐这么做,容易存在隐患而且别人读着也费劲,
2、printf("i=%d\nj=%d\n",increment(i),increment(j));
因为你没有定义函数的返回值,而函数的形参在接收实参的时候会建立一个副本,新开一段内存来存放x,所以x+1后自然不会改变原先的x,而是函数函数中的副本+1,所以i和j的值并没有改变,
已经说得比较详细了,如果还不明白,去看看书吧,书里有答案。
4 楼
jidkui [专家分:0] 发布于 2011-07-16 14:18:00
我用LINUX的GCC编译器编译通过的!没有任何错误提示并形成可执行文件
本人刚学C不到一个礼拜,看不懂的地方我翻书吧!谢谢!
或者,你帮我修改一下!
5 楼
zhqtdhzh [专家分:70] 发布于 2011-07-16 15:40:00
int increment(int x)
{
x = x + 1;
return x;
}
6 楼
zhqtdhzh [专家分:70] 发布于 2011-07-16 15:42:00
建议以后编译时至少得带上个
-Wall
8 楼
jidkui [专家分:0] 发布于 2011-07-16 21:18:00
谢谢5楼
调试通过,结果正确
还没看到return那一节,等看到了,估计就明白了
9 楼
jidkui [专家分:0] 发布于 2011-07-16 21:19:00
6楼的好建议,谢谢
10 楼
jidkui [专家分:0] 发布于 2011-07-16 21:23:00
不知道7楼想说什么!
我来回复