TheScope, Visibility and Lifetime of Variables
C language-- TheScope, Visibility and Lifetime of Variables
全局变量
普通全局变量
//file1
#include<stdio.h>
int a =3;
int main(){
//code block
}
作用范围是整个程序,它们的生命周期贯穿整个程序,从程序开始运行到程序结束,如果在另一个文件中使用外部变量,需要用 extern 关键字声明。(例如:如上定义了一个file1的全局变量,我们可以用file2访问)
//file2
#include<stdio.h>
extern int a;
int main(){
//code block
}
static 修饰
#include<stdio.h>
static int m=5;
int main(){
//代码区
}
当 static 用于全局变量时,其主要作用是限制变量的作用范围,使该变量仅对定义它的文件可见(即限制在文件内作用,其他文件extern访问也打咩)。这种机制有助于实现数据封装,避免变量被其他文件的代码意外修改。
局部变量
它们的作用范围仅限于定义它们的函数或代码块。局部变量在函数调用时被创建,函数返回时被销毁。
普通局部变量
#include <stdio.h>
void func() {
int a = 10; // 自动变量
printf("a = %d\n", a); // 输出 10
} // 离开这个函数后,变量 a 就被销毁了
int main() {
func(); // 调用函数
// 这里不能访问 a,因为 a 是局部变量
return 0;
}
a 是 func 函数中的一个局部变量。当 func 函数执行时,a 被创建并分配内存,函数执行结束后,a 被销毁。
static 修饰
#include <stdio.h>
void func() {
static int count = 0; // 静态变量
count++;
printf("count = %d\n", count);
}
int main() {
func(); // 调用一次,输出 count = 1
func(); // 调用第二次,输出 count = 2
func(); // 调用第三次,输出 count = 3
return 0;
}
在这个例子中,count 是一个静态变量,它只会初始化一次,并在程序运行期间保持其值,即使函数退出,count 的值也不会丢失。
TheScope, Visibility and Lifetime of Variables的更多相关文章
- JavaScript- The Good Parts Chapter 4
Why, every fault’s condemn’d ere it be done:Mine were the very cipher of a function. . .—William Sha ...
- The Go Programming Language. Notes.
Contents Tutorial Hello, World Command-Line Arguments Finding Duplicate Lines A Web Server Loose End ...
- RAD Studio 10.3 Rio (BCB & Dephi) 发布啦
期盼已久的RAD Studio 10.3 Rio 终于发布了: 下载链接:http://altd.embarcadero.com/download/radstudio/10.3/delphicbui ...
- Implementation with Java
Implementation with Java From:http://jcsc.sourceforge.net In general, follow the Sun coding conventi ...
- Go Programming Language
[Go Programming Language] 1.go run %filename 可以直接编译并运行一个文件,期间不会产生临时文件.例如 main.go. go run main.go 2.P ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(三)之Everything Is an Object
---恢复内容开始--- Both C++ and Java are hybird languages. A hybird language allow multiple programming st ...
- zz剖析为什么在多核多线程程序中要慎用volatile关键字?
[摘要]编译器保证volatile自己的读写有序,但由于optimization和多线程可以和非volatile读写interleave,也就是不原子,也就是没有用.C++11 supposed会支持 ...
- Java Concurrency (1)
Memory that can be shared betweenthreads is called shared memory or heap memory. The term variable a ...
- about variables
局部变量(Local Variable),全局变量(global variable),变量共享; 静态局部变量(static local variables),函数运行结束变量值不会消失,并且其它函数 ...
- (转) Name visibility
Scopes Named entities, such as variables, functions, and compound types need to be declared before b ...
随机推荐
- 在Vue3中如何实现四种全局状态数据的统一管理?
四种全局状态数据 在实际开发当中,会遇到四种全局状态数据:异步数据(一般来自服务端).同步数据.同步数据又分为三种:localstorage.cookie.内存.在传统的 Vue3 当中,分别采用不同 ...
- 云原生的 WebAssembly 能取代 Docker 吗?
WebAssembly 是一个可移植.体积小.加载快并且兼容 Web 的全新格式.由于 WebAssembly 具有很高的安全性,可移植性,效率和轻量级功能,因此它是应用程序安全沙箱方案的理想选择.现 ...
- 云原生爱好者周刊:玩 Kubernetes 游戏,赢取免费机票
云原生一周动态要闻: Grafana 8.2.2 发布 OSM(Open Service Mesh)发布 v1.0 的第一个候选版本 谷歌宣布推出 Google Distributed Cloud K ...
- 01 Eclipse使用Maven慢的问题解决
1. Eclipse 使用的是内置的 Maven Eclipse 有可能使用了内置的 Maven,而不是独立安装的 Maven.如果使用 Eclipse 内置的 Maven,默认的 settings. ...
- 狂神说-Docker-学习笔记-01 Run的流程和Docker原理
狂神说-Docker-学习笔记-01 Run的流程和Docker原理 视频链接:https://www.bilibili.com/video/BV1og4y1q7M4?p=1 1.docker run ...
- TextIn ParseX文档解析SDK工具新增Java版本
TextIn ParseX通用文档解析是一款大模型友好的解析工具,支持将pdf文档.jpg.img图像等文件快速转换为markdown格式,支持各类表格.公式解析,帮助大语言模型的数据清洗和文档问答任 ...
- 3.4 Linux文件(目录)命名规则
介绍完 Linux 系统中目录结构之后,读者一定想知道如何为文件或目录命名. 我们知道,在 Linux 系统中,一切都是文件,既然是文件,就必须要有文件名.同其他系统相比,Linux 操作系统对文件或 ...
- 2-2 C++变量
目录 2.2.1 变量定义:列表初始化(list initialization) 2.2.2 变量的定义与声明 C++分离式编译 定义与声明 2.2.3 C++变量命名 2.2.4 变量名的作用域(s ...
- CLIPFit:不绕弯子,直接微调比提示微调和适配器微调更好 | EMNLP'24
来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Vision-Language Model Fine-Tuning via Simple Parameter-Efficient Modifi ...
- 低功耗4G模组Air780E快速入门:使用文件系统存储温湿度数据
伙伴们,今天我们来学习合宙低功耗4G模组Air780E快速入门之使用文件系统存储温湿度数据. 一.编写脚本 1.1 准备资料 780E开发板购买链接 780E开发板设计资料 LuatOS-Air7 ...