回 帖 发 新 帖 刷新版面

主题:这个程序输出什么结果!意外!

#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个回复)

沙发

SN

int increment(int x)
{
    x = x + 1;
} 连个return都没有

板凳

定义函数,也要加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 楼

能编译通过?用什么编译的?
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 楼

我用LINUX的GCC编译器编译通过的!没有任何错误提示并形成可执行文件
本人刚学C不到一个礼拜,看不懂的地方我翻书吧!谢谢!
或者,你帮我修改一下!

5 楼

int increment(int x)
{
    x = x + 1;
    return x;
}

6 楼

建议以后编译时至少得带上个
-Wall

7 楼

1 和2

8 楼

谢谢5楼
调试通过,结果正确
还没看到return那一节,等看到了,估计就明白了

9 楼


6楼的好建议,谢谢

10 楼

不知道7楼想说什么!

我来回复

您尚未登录,请登录后再回复。点此登录或注册