为了账号安全,请及时绑定邮箱和手机立即绑定

两种赋值 结果不同。

#include <stdio.h>

int main()

{

    

    int x,y = 10;

    //使用简单赋值语句实现x乘以2。

    x=x*2 ;

    //使用复合赋值语句实现y乘以2。

    y*=2;

    printf("x=%d\n", x);

    printf("y=%d\n", y);

    return 0;

}

    在慕课网在线ide 输出结果是 

x=0 

y=20

    原版的代码是

#include <stdio.h>

int main()

{

    int x = 10;

    int y = 10;

    //使用简单赋值语句实现x乘以2。

    x=x*2 ;

    //使用复合赋值语句实现y乘以2。

    y*=2;

    printf("x=%d\n", x);

    printf("y=%d\n", y);

    return 0;

}

    输出结果是

x=20

y=20 

发生了什么 导致这两种结果的差异 呢 ?


正在回答

5 回答

int x, y = 10;

相当于

int x; // x未初始化
int y = 10;

C标准规定:函数中定义的变量(局部变量)未赋予初值的话,其值是不确定的。 只有全局变量会被默认初始化为0。

也就是说x的值完全是未定的,可能是0,也可能是任何值。  不同的平台、不同的编译器可能会有不同的结果,对此测试毫无意义。 而且编译器通常会给出“x未初始化”之类的警告。


0 回复 有任何疑惑可以回复我~
#1

李永东 提问者

非常感谢! 我需要的就是这样的解答, 但是大部分的人不会想到是编译器的问题,我只是猜测,所以放到这里供大家看,也找到答案。再次感谢,可以把语法讲的再详细点吗?语法中哪个部位需要改动才能达到目的,避免这种情况发生?
2015-06-26 回复 有任何疑惑可以回复我~
#2

onemoo 回复 李永东 提问者

如果你需要所有变量都有初值,那最好分开定义,分别给初值,这样也比较直观,不容易写错。
2015-06-27 回复 有任何疑惑可以回复我~

好吧 自答。。。 

慕课网 的  后台 出来。。。。

这个在线版的IDE 该换了。。。。

本人亲测,, windows 上,无问题。。。。。。

0 回复 有任何疑惑可以回复我~
#1

李永东 提问者

怎么删除这个。。。。
2015-06-28 回复 有任何疑惑可以回复我~

int x,y = 10;   结果是x=0, y=10 

0 回复 有任何疑惑可以回复我~
#1

李永东 提问者

刚看到回答 以为自己记错了, 但是 慕课网在线版的输出结果是 x=0,y=20 怎么得到这个结果的 可以暂且先不说, 但是 您知道为啥 两次输出结果不同 么 ? (谢谢捧场。)
2015-06-26 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

两种赋值 结果不同。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信