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

请解释一下,小弟实在不明白,就快疯掉了,

特此嗑头以谢

域内的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括在里面!