3.5 作用域与标识符的可见性

 “ 作用域 ”指标识符能够被使用的范围。只有在作用域内标识符才可以被访问(称为“ 可见 ”)。本节只讨论局部域和文件域(全局域),其中局部域包括块域和函数原型域。

任何标识符作用域的起始点均为标识符说明处。

块作用域

”指一对大括号括起来的程序段。块中定义的标识符,作用域在块内。
  • 复合语句是一个块。复合语句中定义的标识符,作用域仅在该复合语句中。
  • 函数也是一个块。函数中定义的标识符,包括形参和函数体中定义的局部变量,作用域都在该函数内,也称作“函数域”。

举例:【例3.7】 输入两数,将两数按从大到小的顺序保存,并输出结果。( 查看动画演示
#include<iostream>
using namespace std;
int main(){
    int a,b;                    //函数内定义局部变量,具有函数域
    cout<<"输入两整数:"<<endl;
    cin>>a>>b;
    cout<<"a="<<a<<'\t'<<"b="<<b<<endl;
    if(b>=a){                    //使a中保存大数,b中保存小数
        int t;                        //块中定义局部变量,具有块作用域
        t=a; a=b; b=t;                //交换a,b的值
    }
    cout<<"a="<<a<<'\t'<<"b="<<b<<endl;
    return 0;
}

举例:【例3.9】 显示同名变量可见性的例子。( 查看动画演示
#include<iostream>
using namespace std;
int n=100;
int main(){
     int i=200,j=300;
     cout<< n<<'\t'<<i<<'\t'<<j<<endl;{        //输出全局变量n和外层局部变量i,j
         int i=500,j=600,n;              //内层块
         n=i+j;
         cout<< n<<'\t'<<i<<'\t'<<j<< endl;        //输出内层局部变量n和i,j
         cout<<::n<<endl;                    //输出全局变量n
     }
     n=i+j;                                //修改全局变量
     cout<< n<<'\t'<<i<<'\t'<<j<< endl;        //输出全局变量n和外层局部变量i,j
     return 0;
}

函数原型作用域

函数原型不是定义函数。在作函数原型声明时,其中的形参作用域只在原型声明中,即作用域结束于右括号。正是由于形参不能被程序的其他地方引用,所以通常只要声明形参个数和类型,形参名可省略。
#include<iostream.h>
void swap(int,int);//函数原型作用域
void main(){
    ……
}

文件作用域

文件作用域也称“ 全局作用域 ”。
  • 定义在所有函数之外的标识符,具有文件作用域,作用域为从定义处到整个源文件结束。
  • 文件中定义的全局变量和函数都具有文件作用域。
  • 如果某个文件中说明了具有文件作用域的标识符,该文件又被另一个文件包含,则该标识符的作用域延伸到新的文件中。如cin和cout是在头文件iostream.h中说明的具有文件作用域的标识符,它们的作用域也延伸到嵌入iostream.h的文件中。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值