C++作用域
来源:百度知道 编辑:UC知道 时间:2024/06/24 12:55:35
各们大侠,请帮一下小弟,
请看下面的程序,
#include<iostream.h>
void main(void)
{ int i=10, j=20, k=30;
cout<<i<<','<<j<<','<<k<<'/n';
{
int i=50, j=60;
k=i+j;
cout<<i<<','<<j<<'/n'
}
cout<<i<<','<<j<<','<<k<<'/n';
}
程序运行结果:
10,20,30
50,60
10,20,110
为什么不是
10,20,30
50,60
10,20,30
请解释一下,小弟实在不明白,就快疯掉了,
特此嗑头以谢
请看下面的程序,
#include<iostream.h>
void main(void)
{ int i=10, j=20, k=30;
cout<<i<<','<<j<<','<<k<<'/n';
{
int i=50, j=60;
k=i+j;
cout<<i<<','<<j<<'/n'
}
cout<<i<<','<<j<<','<<k<<'/n';
}
程序运行结果:
10,20,30
50,60
10,20,110
为什么不是
10,20,30
50,60
10,20,30
请解释一下,小弟实在不明白,就快疯掉了,
特此嗑头以谢
域内的i,j 与 外面的 i,j 是不同的内存单元
对域内的i和j赋初值,不覆盖外面的i,j
域内的 i ,j 是两个新定义的变量,只在域内起作用
虽然名字两两相同,不过是4个变量
域外的是公有的,而域内的是私有的
因为k在域内没有从新定义变量,所以它是外面那个公有的k
只定义了一个k,定义在内区域的外面。在内区域里,k=i+j;===>k=50+60=110. 但k定义在外区域里,因此,回到外区域,k仍然保持原值:110。所以输出是110。记住,只有一个k,无论是在内区域,还是在外区域。
int i=50, j=60;
k=i+j;
这是在内作用域的 j=60后面用分号 就是说定义到此为止
所以后面的k=i+j这里的k并不是在内作用域内定义的变量 而是在外作用域的那个k 如果把 j=60后面的分号改成逗号的话输出结果就是
10,20,30
50,60
10,20,30
你的K定义在了最外面,所以在最外面的程序中,K还是30,不会变的!
除非你用大括号将K括在里面!