变量的作用域、链接属性和存储类型
2017-02-04 15:46
176 查看
一,变量的作用域
1,代码块作用域。声明位于一对大括号之间,有效范围从声明开始至代码块结束。2,文件作用域。声明位于所有代码块之外,有效范围从声明开始至文件尾。
3,函数作用域。函数内有效。一般只针对goto语句所用到的标签。
4,原型作用域。只适用于函数声明的括号内。(用到比较少)
例1:
typedef char *charPtr; //文件作用域 charPtr ch_a;//文件作用域 int int_a;//文件作用域 int fun_a(int int_b);//fun_a是文件作用域,int_b是原型作用域 int main(void) { int int_c = 0;//代码块作用域 { charPtr ch_c; //代码块作用域 int int_d; //代码块作用域 } fun_a(100); return 0; } int fun_a(int int_b) //int_b是代码块作用域 { goto stop; stop: //函数作用域。 return int_b + 1; }
二,链接属性
1,无链接。正常的变量,多次不相互冲突的声明被当作不同的变量实体。被存储在不同的位置。2,内部链接。同一个文件内多次声明的同名变量,指的是同一个实体。位于不同的源文件则指不同的实体。(关键字static)
3,外部链接。同一个program中不管声明几次,在几个源文件中均表示同一个实体。(关键字extern)
例2:
typedef char *charPtr; static charPtr ch_a; //static声明将外部链接转为内部链接 extern int int_a; //声明int_a在其他文件中定义,表示int_a是外部链接。 int int_b; //外部链接,可以在外部源文件中用extern声明。 int fun_a(int int_c); //外部链接 int main(void) { int int_d = 0; //无链接 { charPtr ch_c; //无链接 int int_e; //无链接 } fun_a(100); extern int int_f; //声明int_f在其他文件中定义。 static int int_g; //无链接,因为static只对默认为外部链接的变量有效。 return 0; } int fun_a(int int_c) { return int_c + 1; }
三,存储类型
1,静态内存。程序运行之前创建,程序运行过程中一直存在。并且始终保持原先的值。(用static修饰)2,运行时堆栈。程序执行到声明变量的代码时创建,离开代码段时自行销毁。
3,硬件寄存器。(register)提示对应的变量应该放在机器的寄存器当中,而不是内存中。与编译器相关,不一定能够达到效果。
注:由于函数调用是实参是通过堆栈进行传递的,故函数的形参不能声明用static进行修饰。
四,static的作用
1,改变链接属性:将变量由外部链接改为内部链接,拒绝外部源文件使用该变量。如例2中的变量ch_a.2,改变变量的存储形式。变量存储于静态内存。用于定义静态变量。保证变量在程序运行的过程中一直存在,且只会被定义一次。
注:对于在.h中定义的文件作用域的static变量sa,每一个引用该头文件的源文件都会有一个独立的变量sa。
五,C++中的static
1,类静态成员变量:静态成员是类所有实例的公用变量,可以理解为类的作用域内的全局变量。同普通的static变量一样,在程序初始化的时候分配一次,在程序运行期间一直存在。
2,类静态成员函数
静态函数是类所有实例的公用函数,只能访问类的静态成员变量,通过类名::函数名方式调用。
3,对于类的静态成员(包括变量和函数)。在类的定义中只是声明,必须在cpp中进行初始化/实现,初始化/实现时不需要static修饰。对于类的静态成员变量程序会在启动前(main()执行前)进行初始化。
相关文章推荐
- C学习笔记:变量作用域、链接属性、存储类型
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型 分类: 嵌入式开发学习 2014-11-28 10:42 233人阅读 评论(0) 收藏
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- c语言变量的作用域,链接属性,储存类型&&static关键字
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型(上)
- 作用域、链接属性、存储类型示例——文件之间变量、函数的关系
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- C语言中的作用域,链接属性和存储类型
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型(下)
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型(上)
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型(上)
- C语言提高之——C语言中的作用域、链接属性和存储类型
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- 变量和函数的作用域、链接属性、存储范围
- 【转】C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- C语言中的常量、变量及其属性,类型、存储空间
- C语言变量的作用域和存储类型