eviews输出结果,**一个简单的程序,但是输出结果我怎么想不通啊?

**一个简单的程序,但是输出结果我怎么想不通啊? - 故障解答 - 电脑教程网

**一个简单的程序,但是输出结果我怎么想不通啊?

日期:2007-02-11   荐:
**一个简单的程序,但是输出结果我怎么想不通啊?//-------------------------------------#include<iostream>using namespace std;//-----------------------------------------int main(){ int a=1,b=2,c=3; a ; c =b; { int b=4,c; c=2*b; a =c; cout<<a<<b<<c; } cout<<a<<b<<c;//这里的a和c不是一样都在中间那段代码块中被赋值了啊,怎么a打出来是10,c却是原来的5呢? system("pause"); return 0;}输出结果怎么是10 4 8 10 2 5啊?10 4 8 10 2 5前面三个是在之间局部变量的值,而后面三个是全局变量。磨刀不误砍柴工啊!!!!!!!!!!!!!!!!这样写就可以看清楚了:int main (){ int a=1, b=2, c=3; a ; c =b; { int B=4, C; C=2*B; a =C; cout << a << B << C; } cout << a << b << c; system ( "pause " ); return 0;}其中B,C和你的程序中b,c一样是这样的,你的a只在main中定义了的,所以在c =b后面的括号内,a就相当于一个全局变量,所以里面和外面的a是同一个。而括号里面重新定义了b和c的,所以在括号内的b,c跟外面的是完全没有关系的变量。所以会得到这个结果我晓得但结果也不应该是这样啊楼上已经解释得很好了。但是针对楼主提出的问题,我的答案是:因为c在复合语句中覆盖了全局变量c,而a没有,一直都是全局变量。这是我改写后的输出2;2;5; 2;4;4268036;//这3行的bc,作用域覆盖了上面的bc,2;4;8; //10;4;8; //到这里作用域结束,bc又变为以前的了10;2;5;请按任意键继续. . .这是我改写后的输出#include<iostream>#include <cstdlib>using namespace std;int main(){ int a=1,b=2,c=3; a ; c =b; cout << a << ";" << b << ";" << c << ";" << endl; { int b=4,c; cout << a << ";" << b << ";" << c << ";" << endl; c=2*b; cout << a << ";" << b << ";" << c << ";" << endl; a =c; cout << a << ";" << b << ";" << c << ";" << endl; } cout << a << ";" << b << ";" << c << ";" << endl system("pause"); return 0;}总之局部变量会覆盖全局变量,如果变量名相同的话。局部变量与全局变量作用域的问题。在局部变量的作用域范围内,局部变量起作用(变量名相同,则局部变量覆盖全局变量),除非明确说明使用全局变量(域操作符)变量生存期问题看到这个问题我知道是全局变量和局部变量引起的问题,不过我是第一次知道,在用{}括起来的复合语句中,也是可以使用局部变量的,一直以为需要在子函数中用呢~变量作用域的问题。{ }里的变量在{ }中时有效,如果{ }中的变量与它外面一层的变量同名的话,就会覆盖外层的变量。变量作用域的问题这是作用域的问题,中间的B,C只在中间的花括号内有作用, 一出花括号他们就没用了, A是在整个花括号中都有生命期的,如果你在中间的{}建个A,就能很清楚看出了jf主要考察的是全局变量和局部变量之每一本入门书都说的很清楚的自己看吧多考虑一下main里的C定义没有初始化,他的值是个随机的吧~~不好意思,看错了~~很简单的说,作用域的问题~~上面的,已经说明白了,你可以用,逐步执行来观察a,b,c 的变化.这样就能清楚看到,如何变化了.//-------------------------------------#include<iostream>using namespace std;//-----------------------------------------int main(){ int a=1,b=2,c=3; a ; c =b; { int b=4,c; c=2*b; a =c; cout<<a<<b<<c; } cout<<a<<b<<c;//这里的a和c不是一样都在中间那段代码块中被赋值了啊,怎么a打出来是10,c却是原来的5呢?>>>>>>>>>>>> system("pause"); return 0;}输出结果怎么是10 4 8 10 2 5啊?;//这里的a和c不是一样都在中间那段代码块中被赋值了啊,怎么a打出来是10,c却是原来的5呢?>>>>>>>>>>>>你有没注意全局变量和局部变量不错,是好题啊,我也差点被蒙了,楼上的高手们说的对,你的a没有重定义。建议你认真看书。
标签: