全局变量+局部变量+静态局部变量+静态全局变量
来源:互联网 发布:淘宝蛋糕店排名 编辑:程序博客网 时间:2024/06/07 22:59
全局变量
作用域:全局作用域(全局变量只需在一个源文件中定义,就可以作用于所有的源文件。)
生命周期:程序运行期一直存在
引用方法:其他文件中要使用必须用extern 关键字声明要引用的全局变量。
内存分布:全局数据区
注意:如果在两个文件中都定义了相同名字的全局变量,连接出错:变量重定义
全局静态变量
作用域:文件作用域(只在被定义的文件中可见。)
生命周期:程序运行期一直存在
内存分布:全局数据区
定义方法:static关键字,const 关键字
注意:只要文件不互相包含,在两个不同的文件中是可以定义完全相同的两个静态变量的,它们是两个
完全不同的变量
静态局部变量
作用域:局部作用域(只在局部作用域中可见)
生命周期:程序运行期一直存在
内存分布:全局数据区
定义方法:局部作用域用中用static定义
注意:只被初始化一次,多线程中需加锁保护
int fac(int n){ static int nRet = 1; //静态局部变量 nRet *= n; return nRet;}int main(){ for(int i=1;i<5;i++) { printf("%d!=%d\n",i,fac(i)); } getchar(); return 0;}
结果:
局部变量
作用域:局部作用域(只在局部作用域中可见)
生命周期:程序运行出局部作用域即被销毁
内存分布:栈区
注意:auto指示符标示
int fac(int n){ int nRet = 1; //静态局部变量 nRet *= n; return nRet;}int main(){ for(int i=1;i<5;i++) { printf("%d!=%d\n",i,fac(i)); } getchar(); return 0;}
结果:
函数中在堆中开辟内存:
0.申请方式和回收方式不同
堆和栈的第一个区别就是申请方式不同:栈(英文名称是stack)是系统自动分配空间的,例如我们定义
一个 char a;系统会自动在栈上为其开辟空间。而堆(英文名称是heap)则是程序员根据需要自己申请
的空间,例如malloc(10);开辟十个字节的空间。
由于栈上的空间是自动分配自动回收的,所以栈上的数据的生存周期只是在函数的运行过程中,运行后
就释放掉,不可以再访问。而堆上的数据只要程序员不释放空间,就一直可以访问到,不过缺点是一旦
忘记释放会造成内存泄露。还有其他的一些区别我认为网上的朋友总结的不错这里转述一下:
参考:http://blog.csdn.net/yunyun1886358/article/details/5632087
http://100926.blog.sohu.com/189515489.html
- 局部变量,全局变量,静态全局变量
- 静态局部变量,静态全局变量
- 局部变量、全局变量、静态变量
- 局部变量, 全局变量, 静态变量
- 局部变量、全局变量、静态变量
- 静态变量,局部变量,全局变量
- 局部变量、全局变量、静态变量
- 静态变量,局部变量,全局变量
- 全局变量 局部变量 静态变量
- 全局变量,局部变量,静态变量
- 全局变量、局部变量、静态变量
- 局部变量、全局变量、静态变量
- 全局变量,静态变量,局部变量
- 全局变量、局部变量、静态变量
- 全局变量、静态全局变量、静态局部变量
- 局部变量 局部静态变量 全局变量
- 全局变量、局部变量、静态全局变量、静态局部变量的区别
- 全局变量、静态全局变量、静态局部变量、局部变量!
- Win10离线安装.Net框架
- Android 7.0中ContentProvider实现原理
- flex布局详解
- 彻底理解Python切片 关于list的insert函数
- Recyclerview使用的时候无法将屏幕充满的问题
- 全局变量+局部变量+静态局部变量+静态全局变量
- CentOS_OpenCV--01、切换163yum源
- Bootstrps && Bagging && Boosting
- 2017国际橡塑展- 机械及仪器专区会刊(参展商名录)
- WPF中读写app.config操作
- Dual GAN
- 【MySQL】关于批量增加测试数据的解决办法
- Ubuntu 16.04安装Matlab 2016b
- Make与Ant