1.c语言可以确定4种不同类型的作用域:
-
代码块作用域
在代码块中定义的变量,具有代码块作用域。作用范围是从变量定义的位置开始,到标志该代码块结束的右大括号(})处 -
文件作用域
任何在代码块之外声明的标识符都具有文件作用域,作用范围是从它们的声明位置开始,到文件的结尾处都是可以访问的 -
原型作用域
原型作用域只适用于那些在函数原型中声明的参数名
void function(int,int,int);
void func(int a,int b,int c)
{
……
}
-
函数作用域
函数作用域只适用于goto语句的标签,作用将goto语句的标签限制在同一个函数内部,以及防止出现重名标签声明: 是通知编译器该变量名及相关的类型已存在,不需要再为此申请内存空间;当一个变量被声明的时候,编译器就知道该变量被定义在其他地方
定义: 当一个变量被定义的时候,编译器为变量申请内存空间并填充一些值
声明与定义小结: 局部变量既是定义又是声明;定义只能来一次,否则就叫做重复定义某个同名变量;而声明可以有很多次
2.c语言提供5种不同的存储类型:-
auto
在代码块中声明的变量默认的存储类型就是自动变量(auto) -
register
寄存器变量,将一个变量声明为寄存器变量,那么该变量就有可能被存放CPU的寄存器中。不能通过取址运算符求地址。 -
static
使用static来声明局部变量,那就会将局部变量指定为静态局部变量,生存周期变化,作用域不变;
修饰全局变量时,作用域被限制了(限制到当前源文件)
修饰函数时,作用域被限制了(限制到当前源文件 -
extern
extern关键字是用于告诉编译器这个变量或函数在别的地方已经定义过了,不要报错,再去找找。 -
typedef
类型重命名(自定义数据类型),建议把复杂的类型转换为简单的标识符加上typedef,他就会由变量变为对应的类型
-