作用域问题

来源:互联网 发布:怎么申请淘宝卖家 编辑:程序博客网 时间: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;
}

0 0
原创粉丝点击