作用域问题
来源:互联网 发布:怎么申请淘宝卖家 编辑:程序博客网 时间:2024/06/05 15:29
编译器可以确认4种不同类型的作用域:文件作用域、函数作用域、代码块作用域、原型作用域。
代码块作用域:可以被这个代码块中的所有语句访问。注意:当代码块处于嵌套状态,声明于内层代码块的标识符的 作用域到达该代码块的尾部;当代码块不是嵌套的时,声明于每个代码块的变量无法被另一个代码块 访问。
文件作用域:任何在所有代码块之外声明的标识符都具有文件作用域,他表示这些标识符从声明之处到源文件结尾都 是可以访问的。
原型作用域:只适用于在函数原型中声明的参数名。
函数作用域:它只适用于语句标签,语句标签用于沟通语句。希望不要用到这个知识点。(1965年,Dijkstra提出从 高级语言中取消goto语句。)
下边,来看一道例题:
#define _CRT_SECURE_NO_WARNINIGS 1
#include<stdio.h>
int count = 3; //声明全局变量,该变量在整个文件中都有效,也就是具有文件作用域。
int main()
{
int i, sum, count = 2; //具有代码块作用域,在整个main函数中有效。
for (i = 0, sum = 0;i < count;i += 2, count++)//循环开始(第0次):count = 2,i= 0,sum=0
//循环第一次:i=2,count = 3,满足i<count
//循环第二次:i= 4,count=4,不满足count>i退出循环体
{
static int count = 4;
count++;//具有代码块作用域,在整个for循环中有效。循环开始:count = 5;循环第一次:count = 6
if (i % 2 == 0)
{
extern int count;//声明外部变量,在连接过程中,编译器会在函数函数之外找到全局变量的声明。count = 3
count++;//count =4; count = 5
sum += count;//sum = 4 sum=9+5 =14
}
sum += count;//此处count = 5(是for循环里的count),sum=9 ;;; sum= 14+6=20
}
printf("%d %d",sum,count);//出循环时,sum = 20,count = 4
system("pause");
return 0;
}
- 作用域问题
- java 作用域问题
- settimeout 作用域问题
- 作用域问题
- javaScript作用域问题
- js 作用域问题
- Python作用域问题
- 变量、作用域问题
- 关于作用域的问题
- WEB作用域依赖问题
- for循环作用域问题
- Javascript作用域的问题
- 变量作用域的问题
- AS3变量作用域问题
- golang变量作用域问题
- 关于变量作用域问题
- JavaScript 的作用域问题
- Javascript作用域的问题
- vs中项目生成事件写法
- knn算法实现的数字手写识别
- 杭电ACM题1000-1002
- Android 6.0 wif的变动
- 1250: 素数回文
- 作用域问题
- 6.3 Android Framework - LayerDrawable
- Aliyun oss实现(一),向STS申请临时SecretToken
- N皇后问题
- xclip 操作Linux剪切板
- ios 文字变色
- TCP连接建立与断开
- Struts原理最经典的回答面试官的题目
- JAVA中的作用域public、private、protected、default深度理解,为什么这么做?