这个怎么这样输出?为什么 ?
#include <iostream.h>
void main()
{int n;
int array[5]={2};
for(n=0;n<5;n++)
cout<<""<<array[n];
cout<<endl;
}
结果:
2 23567 23567 23567 23567
实在不明白。哪里来的23567。请大家解释解释!
问题点数:0、回复次数:10Top
1 楼wh_xiexing(谢兴)回复于 2003-08-01 09:59:07 得分 0
int array[5] = {2} ;
这个语句只对第一个数组元素赋值,
应该改为 int array[5] = {5,5,5,5,5};Top
2 楼Icat(晨)回复于 2003-08-01 10:38:25 得分 0
你的array没有初始化Top
3 楼yangsiqun(灌水是我有声的抗议)回复于 2003-08-01 10:53:22 得分 0
恩?不是啊,我在VC6下运行没问题啊,而且int array[5] = {2} ;
这个语句并不是只对第一个数组元素赋值,而是把其他的变量默认的初始化为0,
因此输出是:20000!
Top
4 楼Icat(晨)回复于 2003-08-01 11:53:55 得分 0
只是给第一个元素赋值了Top
5 楼winespirit(酒鬼)回复于 2003-08-01 12:02:10 得分 0
妈的!你给Microsoft害了是不是?在标准C/C++中,声明但未初始化的变量的值是随机的,不定的,所以,你的结果是正常的。Top
6 楼steedhorse(晨星)回复于 2003-08-01 12:43:56 得分 0
VC6中好像也只是DEBUG版本才做初始化吧?那是为了方便调试。
所以,如果不养成好的编程习惯,经常就会发生Debug版本好用而Release版本不好用这类问题。Top
7 楼Icat(晨)回复于 2003-08-01 15:20:54 得分 0
同意steedhorse(晨星)
好习惯最好早养成,
到后来就好多了
Top
8 楼AKing2008(AINTO)回复于 2003-08-02 10:13:56 得分 0
to winespirit(酒鬼)
你的意思是每次的结果都不同吗?
能说说为什么只声明但不初始化就会随机吗?是一种规则还是因为什么呢?Top
9 楼johnson_sun()回复于 2003-08-02 10:47:48 得分 0
................昏死
真的是一代不如一代
老兄
放下你的VC
去找个turbo c来练习你的C语言功底Top
10 楼steedhorse(晨星)回复于 2003-08-02 18:19:30 得分 0
“能说说为什么只声明但不初始化就会随机吗?是一种规则还是因为什么呢?”
定义一个变量在函数被调用时事实上就是预留一块内存来保存这个变量的值,如果你不亲自去初始化,难道它自己还会自动初始化?
有些语言是有自动初始化的功能,但那是以牺牲效率为代价的。C语言认为,定义就是定义,是否要初始化应该看程序员的习惯,而不应该对每一个定义都自动附加上一个初始化的操作(因为那至少需要一条机器指令),既然没有初始化,那么这个内存单元里原来的值是什么当然就很难说了。所以,不是因为什么规则,而恰恰是因为“没有规则”。
内存在物理上就是一块内存条,在机器运行时,它并不知道自己那个单元被分配了,那个单元没被分配,除非你改写它,否则,它不可能随着系统的运行而不断地“自动”初始化。Top



