第一部分 基本语言 第二章 变量和基本类型(2.3.6名字的作用域)(2.3.7在变量的使用处定义变量)

2.3.6名字的作用域:

C++程序中,每个名字都和实际的实体(变量,函数,类型等)相关联。尽管与实体相关联但是可以在同一个程序中使用同样的名字,只要他们在不同的上下文中,而不同的上下文是区分这些同名实体的意义的依据。用来区分不同意义的上下文叫做作用域。作用域是程序中的一段区域,同一个名字,可以和不同作用域中的实体相关联。

一、C++程序作用域范围:

1、C++程序中不同作用域是用花括号来界定的,名字从其声明点到所在作用域结束都是可见的。

2、在所有花括号之外定义的名字叫全局变量,有全局作用域权利,名字在整个程序可见。

3、函数内定义的叫局部变量具有局部作用域权利在函数内可见。

4、语句内定义这只能在语句中使用。具有语句作用域权利。

程序示例如下:

#include <iostream>


using namespace::std;


int main(int argc,constchar * argv[])

{

int sum =0;

for (int val =1; val<=10; ++val) {

sum+=val;

}

cout<<"sum of 1 to 10 inclusive is"<<sum<<endl;

return0;

}

函数中,main在所有花括号外定义,具有全局作用域,sum在函数内部定义,具有局部作用域,而val在for语句内定义,具有语句作用域。


二、作用域可嵌套

对于全局变量来说,可以在局部内部使用,但是当函数内部定义与全局变量同名的实体时,会屏蔽掉全局变量。

程序示例:

#include <iostream>


using namespace::std;


int b=5,c=10;

int main(int argc,constchar * argv[])

{

int sum =0;

for (int val =1; val<=10; ++val) {

sum+=val;

int b = sum;

cout<<b<<" "<<c<<endl;

}

cout<<"b: "<<b<<" c: "<<c<<endl;

cout<<"sum of 1 to 10 inclusive is"<<sum<<endl;

return0;

}


程序输出:

1 10

3 10

6 10

10 10

15 10

21 10

28 10

36 10

45 10

55 10

b: 5 c: 10

sum of 1 to 10 inclusive is55


全局变量b和c,在for语句内部,b定义被覆盖成新的语句内定义的内容,c不变。在for语句外,b离开函数内定义作用域恢复全局定义。c不变。


在变量第一次被使用的地方定义变量更能提高程序的可读性,必须在使用该变量最外层作用域里面或之前定义该变量。




习题解答:

1、下列程序中的j值是多少?

int i =42;

int main()

{

int i =100;

int j = i;

}

答:j=100。

2、下列程序段将会输出什么?

#include <iostream>


using namespace::std;

int main()

{

int i =100,sum =0;

for(int i=0;i!=10;++i){

sum+=i;

}

cout<<i<<" "<<sum<<endl;

return0;

}

答:100 45。

3、下列程序合法吗?

int sum =0;

for(int i = 0;i !=10;++i)

{

sum+=i;

}

cout<<"sum from 0 to"<<i<<"is"<<sum<<endl;

答:不合法。i是在for语句内定义,生命期结束。



2.3.7在变量的使用处定义变量

一、变量的定义或声明可以在程序的任何地方,但是一个变量在使用之前一定要先定义或声明。在变量的使用处定义或声明变量可以提高程序可读性。变量只在定义开始处到其声明所在作用域截至处才可以访问



习题解答:

1、下列程序中j的值是多少?

int i=42;

int main()

{

int i=100;

int j=i;

}


答:j的值为100。

2、下列程序将会输出什么?

int i=100,sum=0;

for (int i=0; i!=10; ++i) {

sum=sum+i;

}

cout<<i<<" "<<sum<<endl;

答:输出:100,45

3、下列程序合法吗?

int sum=0;

for (int i=0; i!=10; ++i) {

sum+=i;

}

cout<<"sum from 0 to "<<i<<"is"<<sum<<endl;

答:不合法,i是语句作用域,不能输出值。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值