存储类型、标识符的生命周期
来源:互联网 发布:中国软件与即时 编辑:程序博客网 时间:2024/05/01 14:42
auto和register修饰的称为自动存储类型,static修饰的称为静态存储类型,extern 修饰的称为外部存储类型。
1、自动存储类型
局部变量都是自动变量,生命期开始于块的执行,结束于块的结束。
寄存器变量用register修饰,不同编译器对哪些变量可以说明为寄存器变量有不同的规定。一般不提倡。
2、外部存储类型
一个C++程序可由多个源程序文件组成。多文件程序系统可以通过外部存储类型的变量和函数来共享某些数据和操作。
一般定义的全局变量和函数默认为外部的,即其作用域可以延伸到程序的其他文件中。但其他文件如果要使用这个文件中定义的全局变量和函数,则应该在使用前用extern进行外部声明。
此外,在同一个文件中,如果一个函数使用到定义在该函数之后的全局变量,那么也必须对使用到的全局变量进行外部变量声明,以满足先定义后使用的原则。
/* Ex1.cpp ,由main()组成*/# include <iostream>using namespace std;void fun2();//外部函数声明,等价于extern void fun2();int n;//全局变量定义int main(){n=1;fun2();// fun2()定义在文件Ex2.cpp中cout<<"n="<<n<<endl;return 0;}
/* Ex2.cpp,由fun2()组成*/extern int n;//外部变量声明,n定义在文件Ex1.cpp中void fun2() {//fun2()被文件Ex31.cpp中的函数调用n=3;}
3、静态存储类型
根据定义的位置不同,分为局部静态变量和全局静态变量。静态变量均存储在全局数据区,默认初始化为0;静态变量占有的空间要到整个程序执行结束后才释放。因此静态变量具有全局生命期。
局部静态变量是定义在块中的静态变量,编译器在全局数据区中为其开辟空间并保存数据,该空间一直到整个程序结束时才释放。局部变量具有局部作用域,但却具有全局生命期。
/*Ex3 自动变量与局部静态变量的区别。*/#include <iostream>using namespace std;int st();int at();int main(){ int i; for(i=0;i<5;i++) cout<<at()<<'\t'; cout<<endl; for(i=0;i<5;i++) cout<<st()<<'\t'; cout<<endl; system("pause"); return 0;}int st(){ static int t=100; //局部静态变量 t++; return t;}int at(){ int t=100; //自动变量 t++; return t;}
st()中的t是局部静态变量,与程序有相同的生命期,其初始化只在最初进行一次,每次调用修改的值都会被保留下来。
/*Ex4 局部静态变量*/#include <iostream>using namespace std;int counter(int i){static int count=0;count=count+i;return count;}void main(){int i,j;for(i=0;i<=5;i++){j=counter(i);}cout<<"j="<<j<<endl;system("pause");}
0 0
- 存储类型、标识符的生命周期
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型(上)
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型(下)
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型(上)
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型(上)
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- 存储类型与标识符的生命期
- Java知识(标识符、数据的存储和类型)
- 3.6 变量存储类型与标识符生命期
- C++变量存储类型与标识符生命期
- C++变量存储类型与标识符生命期
- Java类型的生命周期
- JVM-类型的生命周期
- 类型的生命周期
- 存储过程:不是有效的标识符
- linux-ubuntu关闭防火墙
- ant做Android打包时出现“无法确定 <T>T 的类型参数”
- Linux下oracle10g的安装与配置及相关问题解决
- 机器学习-KNN
- 【21】重建二叉树
- 存储类型、标识符的生命周期
- ssh免登陆设置后,还是要输入密码
- Stack Overflow Questions Tags Users Badges Unanswered Ask Question ruby
- MATLAB中文件的读写和数据的导入导出
- 如何管理二十八类型的员工
- swift笔记
- ORA-01466: unable to read data - table definition has changed
- 第三讲:关系数据库模型
- 关于ubuntu下的c++编译