C/C++中static的作用(面向过程)
2012-07-13 15:42
405 查看
面向过程设计中的static
1、静态全局变量
静态全局变量有以下特点:
1.该变量在全局数据区分配内存;
2.未经初始化的静态全局变量会被自动初始化为0(在函数体内声明的自动变量的值是随机的,除非它被显式初始化,而在函数体外被声明的自动变量也会被初始化为0);
3.静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;
一般程序把新产生的动态数据存放在堆区,函数内部的自动变量存放在栈区。自动变量一般会随着函数的退出而释放空间,静态数据(即使是函数内部的静态局部变量)也存放在全局数据区。全局数据区的数据并不会因为函数的退出而释放空间。
注意:全局变量和全局静态变量的区别
1.全局变量是不显式用static修饰的全局变量,全局变量默认是动态的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern的声明,就可以使用全局变量。
2.全局静态变量是显式用static修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用extern声明也不能使用。
2、静态局部变量
运行结果:
静态局部变量有以下特点:
1.该变量在全局数据区分配内存;
2.静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
3.静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
4.它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;
3、静态函数
静态函数的好处:
1.静态函数只能在声明它的文件当中可见,不能被其它文件所用;
2.其它文件中可以定义相同名字的函数,不会发生冲突;所以不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。
1、静态全局变量
#include <iostream> using namespace std; void fn(); static int n; //定义静态全局变量 void main() { n=20; cout<<n<<endl; fn(); } void fn() { n++; cout<<n<<endl;}
静态全局变量有以下特点:
1.该变量在全局数据区分配内存;
2.未经初始化的静态全局变量会被自动初始化为0(在函数体内声明的自动变量的值是随机的,除非它被显式初始化,而在函数体外被声明的自动变量也会被初始化为0);
3.静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;
一般程序把新产生的动态数据存放在堆区,函数内部的自动变量存放在栈区。自动变量一般会随着函数的退出而释放空间,静态数据(即使是函数内部的静态局部变量)也存放在全局数据区。全局数据区的数据并不会因为函数的退出而释放空间。
注意:全局变量和全局静态变量的区别
1.全局变量是不显式用static修饰的全局变量,全局变量默认是动态的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern的声明,就可以使用全局变量。
2.全局静态变量是显式用static修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用extern声明也不能使用。
2、静态局部变量
#include <stdio.h> void trystat(void); int main() { int count; for(count=1; count<=3; count++) { printf("Now look when count = %d:\n", count); trystat(); } return 0; } void trystat(void) { int fade = 1;//每次调用trystat()时,fade都会被初始化为1 static int stay = 1; //stay只在编译trystat()函数时被初始化一次 printf("fade = %d and stay = %d\n", fade++, stay++); }
运行结果:
Now look when count = 1: fade = 1 and stay = 1 Now look when count = 2: fade = 1 and stay = 2 Now look when count = 3: fade = 1 and stay = 3
静态局部变量有以下特点:
1.该变量在全局数据区分配内存;
2.静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
3.静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
4.它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;
3、静态函数
#include <iostream> using namespace std; static void fn();//声明静态函数 void main() { fn(); } void fn() { int n=10; cout<<n<<endl;} //定义静态函数
静态函数的好处:
1.静态函数只能在声明它的文件当中可见,不能被其它文件所用;
2.其它文件中可以定义相同名字的函数,不会发生冲突;所以不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。
相关文章推荐
- C++中const与static在面向过程代码中的异同
- C++中的static用法(面向过程+面向对象)
- 新手小议C++中const与static在面向过程代码中的异同
- C++中const与static在面向过程代码中的异同
- static的作用,在面向对象和面向过程中的应用
- C++ AFX_MANAGE_STATE(AfxGetStaticModuleState())的作用
- c/c++中static关键字的作用
- C/C++中static关键字的作用
- C++ 面向过程还是面向方法来创建函数
- C/C++语言中Static的作用详述
- C++中Static作用和使用方法
- 转:C++中Static作用和使用方法
- 从C++到Python(六)函数与面向过程
- C/C++中static关键字作用总结
- [程序员面试题]C/C++中static的作用
- c++中static的作用
- C/C++语言中Static的作用详述
- 面向对象的c++和面向过程的c语言
- C/C++中 static 的作用
- C/C++中Static的作用详述