标识符的作用域与可见性

作用域是一个标识符在程序正文中有效的区域。

作用域分类:

  • 函数原型作用域
  • 局部作用域(块作用域)
  • 类作用域
  • 文件作用域(作用域到文件尾结束)
  • 命名空间作用域(暂略)

作用域的可见性:

  • 可见性是从对标识符的引用的角度来谈的概念
  • 可见性表示从内层作用域向外层作用域“看”时能看见什么
  • 如果标识在某处可见,就可以在该处引用此标识符
  • 如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见
  • 对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见


关于函数原型作用域,局部作用域(块作用域),文件作用域的例子如下面的程序(代码中有注释)

类作用域:例如p是类A中的一个数据成员,那么p在A的所有函数成员中都有效,除非函数成员中也定义了一个名称为p的变量,这样的p就具有类作用域


#include<stdio.h>
int n;		//全局变量,属于文件作用域
int Pow(int x, int n);	//函数原型中的参数,其作用域始于"(",结束于"),不能用于程序正文的其它地方"
int main(void)
{
	n = 12;
	{
		int n = 6;		//局部变量,局部作用域
		printf("%d\n", n);		//输出结果为6,这是因为在内层声明了n而导致外层的全局变量在这里被屏蔽
	}
	//上一个大括号嵌套结束,大括号内n的作用域到此结束,存储空间被释放
	{
		n = 8;
		printf("%d\n", n);		//输出结果为8,这是因为内层没有声明n,所以用的是外层的n
	}
	printf("%d\n", n);		//输出结果为8
	printf("%d\n", Pow(2, 5));		//输出结果为32
	return 0;
}
int Pow(int x, int n)	//函数的形参和下面函数里定义的变量都只在这个函数内有效,属于局部作用域
{
	int ans;
	ans = 1;
	for(int k,i=1;i<=n;i++)		//这个k和i只在这个for循环里面有效
	{
		ans *= x;
		k = 15;
	}
	//printf("%d\n", k);	非法,“k”: 未声明的标识符
	return ans;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值