打印

全局变量赋值问题

[复制链接]
1096|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
baidudz|  楼主 | 2012-6-22 20:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "stdafx.h"
int X,Y;//X=1,Y=7;
unsigned long rng( void )
{
   
if ( X &
0x80000000L ) X = ( (X ^
0x00000057L) <<
1) |
0x00000001L;
   
else    X = X <<
1;

    Y
=
1664525L*Y +
1013904223L;
   
return (X + Y);
}
int _tmain(int argc, _TCHAR* argv[])
{
     
    X
=6,Y=9;
    rng();
   
return
0;
}

第一次: 用 int X,Y; 编译运行后,X,Y的值始终为0,0 (X=6,Y=9; 没效果,是什么原因?)
第二次: 改用 X=1,Y=7; 编译运行,结果如期望,会改变;
第三次: 再改用 int X,Y; (不清理项目),结果如期望,会改变;开始是1,7;然后是 6,9
第四次:清理项目,再用 int X,Y; 编译运行后,X,Y的值始终为0,0 (X=6,Y=9; 没效果,是什么原因?)
问题1:全局变量没有初始化的话,会始终是 0 吗?
问题2: 清理和不清理后的 效果,为什么不一样?
编译环境: VS 2010

相关帖子

沙发
秋天落叶| | 2012-6-22 21:00 | 只看该作者
问题1 是的,未初始化的全局变量自动以0填充
问题2 不知道。
另外如果你main里面int X,Y是定义了一个同名的局部变量,而函数里面修改的是全局的,所以不起作用
如果直接X=6,Y=7,那就会修改全局变量

使用特权

评论回复
板凳
gxgclg| | 2012-6-22 21:07 | 只看该作者
问题1:全局变量没有初始化的话,会始终是 0 吗?
是的。对于int类型的全局变量而言,编译器会自动将他们初始化为0

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

239

主题

2284

帖子

0

粉丝