zoukankan
html css js c++ java
C语言 变量的作用域和生命周期(转)
转自 https://blog.csdn.net/u011616739/article/details/62052179
a.普通局部变量
属于某个{},在{}外部不能使用此变量,在{}内部是可以使用。执行到普通局部变量定义语句,才会分配空间,离开{},自动释放。
普通局部变量不初始化,默认值为随机数。
b.static局部变量
属于某个{},在{}外部不能使用此变量,在{}内部是可以使用。在编译阶段就已经分配空间,初始化只能使用常量。
static局部变量不初始化,默认值为0。离开{},static局部变量不会释放,只有整个程序结束才释放。
注意:静态局部变量的作用域属于某个{},但是它的生命周期却是从编译阶段到整个程序结束。
c.普通全局变量
在编译阶段分配空间,只有
整个程序结束才释放
。普通全局变量只要定义了,任何地方都能使用,
使用前需要声明所有的.c文件
,只能定义一次普通全局变量,但是可以声明多次(外部链接)。
注意:全局变量的作用域是全局范围,但是在某个文件中使用时,必须先声明。
d.static全局变量
在编译阶段分配空间,只有整个程序结束才释放。static全局变量
只能在定义所在的文件中
使用此变量(内部链接)。不同的.c文件,可以定义一次static全局变量。
e.extern函数和static函数的区别(作用域)
extern函数所有文件都是调用,所有文件中只能定义一次extern函数。
static函数只能在定义所在的文件中调用此函数,不同文件,可以定义一次static函数。
怎样记忆C语言中的作用域和生命周期?
要理解C语言中各种变量的作用域和生命周期,必须结合C语言的内存管理。详情见博客:
http://blog.csdn.net/u011616739/article/details/61621815
全局变量和静态变量是在程序编译期就分配到数据段或bss段中的,在整个程序的运行期,数据段和bss段中的内容是不会发生改变的。所以所有的全局变量和静态变量的生命周期必定是从程序编译到程序运行结束。而且如果全局变量和静态变量没有初始化,会统一默认初始化为0.
而局部变量是在程序的运行时,在栈中分配的内存,所以生命周期一定是从程序运行的某一个时刻开始。
查看全文
相关阅读:
Linux命令: ls -l显示文件和目录的详细资料
Linux命令: ls -F
Linux命令: pwd显示工作路径
Linux命令: cd /home 进入'/home'目录
Linux命令: cd ../.. 返回上两级目录
Linux命令: cd
boost::mpl::eval_if的使用方法
【block第四篇】实现
Android中pendingIntent的深入理解
hdu 1565 方格取数(1)(状态压缩dp)
原文地址:https://www.cnblogs.com/mwl523/p/10744275.html
最新文章
openwrt编译系统制作ubi镜像时会使用系统自带的ubinize还是openwrt编译系统中编译的ubinize
ubinize的用法
linux内核启动时报错ubi0 error: validate_ec_hdr: bad VID header offset 256, expected 64
linux下如何关闭某个tmux窗口
linux下如何kill tty终端
linux下如何退出tmux和重新进入tmux
git format-patch如何生成指定的某一个commit的补丁
ubuntu如何使zsh替换bash
Java根据html模板创建 html文件
Java读取根据HTML模板生成HTML页面
热门文章
Java项目中读取properties文件,以及六种获取路径的方法
java 静态资源访问详解
Java 读取模板并生成HTML静态文件实例
【java】获取项目资源路径
Spring boot 读取resource目录下的文件
在Spring Boot快捷地读取文件内容的若干种方式
za
Linux命令: 在线使用linux命令环境
Linux命令: touch tem.txt创建txt文件
Linux命令: ls -a显示隐藏文件
Copyright © 2011-2022 走看看