高分求答,关于C++

来源:百度知道 编辑:UC知道 时间:2024/06/08 05:00:10
大家帮忙看下面的代码
#include<iostream.h>

void func();
int n=1;

void main()
{
static int x=5;
int y;
y=n;
cout<<"x="<<x
<<",y="<<y
<<",n="<<n<<endl;
func();
cout<<"x="<<x
<<",y="<<y
<<",n="<<n<<endl;
func();
}

void func()
{
static int x=4;
int y=10;

x+=2;
n+=10;
y+=n;
cout<<"x="<<x
<<",y="<<y
<<",n="<<n<<endl;
}
编译的结果为:
x=5,y=1,n=1
x=6,y=21,n=11
x=5,y=1,n=11
x=8,y=31,n=21
我想问的是:结果的第二行已得n=11,且n为全局变量,又y=n,所以第三行的y应该等于11啊!怎么会等于1???

变量是有作用范围的,main()函数和func()函数中都有局部变量y,他们是互不干扰的,第一次在main()中输出y后,跳去输出func()中的y,这时main()中的y是不变的,所以再返回main()中第三次输出y时,y还是1不变。

把你的程序调换下位置
#include<iostream.h>
int n=1;

void func()
{
static int x=4;
int y=10;

x+=2;
n+=10;
y+=n;
cout<<"x="<<x
<<",y="<<y
<<",n="<<n<<endl;
}

void main()
{
static int x=5;
int y;
y=n;
cout<<"x="<<x
<<",y="<<y
<<",n="<<n<<endl;
func();
cout<<"x="<<x
<<",y="<<y
<<",n="<<n<<endl;
func();
}
运行结果一样
那么我们来看
你定义了一个VOID func()的函数
输出结果第一行是你主函数里的cout
第二行是你调用func里面的cout
第三行还是主函数的cout
第四行是func的cout
你的x,y是在func里定义的 不是全局变量
所以第一行