问一个 C 语言的问题,还没睡的同学来看看那。谢谢了

2015-06-17 00:32:15 +08:00
 zhangchioulin

我遇到了一段代码百思不得其解,请看代码是C语言的
#include <stdio.h>
int a, b = 10;

void test()
{
    a++;

    printf("a=%d ", a);


    int a = 0;
    a++;
    printf("a=%d\n", a);
}

int main()
{
    test();
    test();
    test();
    return 0;
}

这是C语言的代码,我想问为什么程序一开始a就直接成1了?不应该是10吗?
会不会是某处 a = 0了?
好奇怪啊

3663 次点击
所在节点    问与答
38 条回复
ss098
2015-06-17 00:36:36 +08:00
int a, b=10; 等价于
int a;
int b=10;
moroumo
2015-06-17 00:37:33 +08:00
a在一开始不应该是内存随机数吗?
zhangchioulin
2015-06-17 00:37:33 +08:00
@ss098我的天,原来如此
zhangchioulin
2015-06-17 00:38:13 +08:00
运行结果是:
a=1 a=1
a=2 a=1
a=3 a=1
Madimo
2015-06-17 00:38:34 +08:00
呃....其实最上面那个 int a, b = 10 只是把 b 初始化为10了,a的值其实是未定义的,运气好会是0。
如果按你说的应该是 int a = 10, b = 10; 这样
zhangchioulin
2015-06-17 00:39:12 +08:00
@Madimo 谢谢!
ss098
2015-06-17 00:39:20 +08:00
我好像没有看对问题,重新回答一遍。

第一条 a++ 是对全局的 a 赋值的,而 test() 中定义的是局部的。
zhangchioulin
2015-06-17 00:39:31 +08:00
@moroumo 楼上解答了
ss098
2015-06-17 00:39:56 +08:00
哦不 ... 刷新又出了这么多回答,我好像想多了。
razrlele
2015-06-17 00:51:21 +08:00
@moroumo 现在int默认初始值为0了吧~
weyou
2015-06-17 00:58:18 +08:00
a是一个全局变量, 放在静态(全局)数据区, 初始化时默认是0, 这个不是随机的。
sandideas
2015-06-17 00:59:42 +08:00
你们难道不知道c语言的全局变量会自动初始化为0么。???
moroumo
2015-06-17 00:59:52 +08:00
@razrlele int默认初始值是否为0看编译器了,所以C的编码规范是必须要初始化变量,不能依赖编译器和平台。
crab
2015-06-17 01:46:25 +08:00
@razrlele 函数内没初始的话是随机的。
Andiry
2015-06-17 01:51:57 +08:00
@moroumo 全局变量初始化与编译器无关
Athrob
2015-06-17 02:00:34 +08:00
不明白为什么要写这种代码, 局部变量跟全局变量重名真的好吗, 看代码的人能理解为什么要这么写吗?
seki
2015-06-17 02:15:05 +08:00
这个问题给人一种熟悉的感觉,那感觉可以用三个字形容,谭浩强
aheadlead
2015-06-17 03:09:47 +08:00
@moroumo 应当说这是个不确定的值。
loveuqian
2015-06-17 04:55:50 +08:00
逗号表达式
怎么还没学oc啊
loveuqian
2015-06-17 04:57:32 +08:00
int a = 10;
int b = a, 20;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/199139

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX