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;
}

afunc 函数中的一个局部变量。当 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的更多相关文章

  1. 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 ...

  2. The Go Programming Language. Notes.

    Contents Tutorial Hello, World Command-Line Arguments Finding Duplicate Lines A Web Server Loose End ...

  3. RAD Studio 10.3 Rio (BCB & Dephi) 发布啦

    期盼已久的RAD Studio 10.3 Rio  终于发布了: 下载链接:http://altd.embarcadero.com/download/radstudio/10.3/delphicbui ...

  4. Implementation with Java

    Implementation with Java From:http://jcsc.sourceforge.net In general, follow the Sun coding conventi ...

  5. Go Programming Language

    [Go Programming Language] 1.go run %filename 可以直接编译并运行一个文件,期间不会产生临时文件.例如 main.go. go run main.go 2.P ...

  6. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(三)之Everything Is an Object

    ---恢复内容开始--- Both C++ and Java are hybird languages. A hybird language allow multiple programming st ...

  7. zz剖析为什么在多核多线程程序中要慎用volatile关键字?

    [摘要]编译器保证volatile自己的读写有序,但由于optimization和多线程可以和非volatile读写interleave,也就是不原子,也就是没有用.C++11 supposed会支持 ...

  8. Java Concurrency (1)

    Memory that can be shared betweenthreads is called shared memory or heap memory. The term variable a ...

  9. about variables

    局部变量(Local Variable),全局变量(global variable),变量共享; 静态局部变量(static local variables),函数运行结束变量值不会消失,并且其它函数 ...

  10. (转) Name visibility

    Scopes Named entities, such as variables, functions, and compound types need to be declared before b ...

随机推荐

  1. 6. CSS有哪些方法可以提升层级

    1. 使用 z-index 2. 使用定位,脱离标准流

  2. MYSQL存储过程-练习2 while 循环

    MYSQL存储过程-练习2 while 循环 1 #WHILE循环 2 DELIMITER $$ 3 4 CREATE PROCEDURE `sp_while`() 5 BEGIN 6 DECLARE ...

  3. DIKI:清华提出基于残差的可控持续学习方案,完美保持预训练知识 | ECCV'24

    本研究解决了领域-类别增量学习问题,这是一个现实但富有挑战性的持续学习场景,其中领域分布和目标类别在不同任务中变化.为应对这些多样化的任务,引入了预训练的视觉-语言模型(VLMs),因为它们具有很强的 ...

  4. 题解:AT_abc374_d [ABC374D] Laser Marking

    题目传送门 luogu观看 思路 注意一下数据范围. \(1 \le n \le 6\) 首先想到 dfs. 按照题意,先算出位置到线段的一段所需的时间. 再算出画线段所需的时间,就行了. 输出后发现 ...

  5. 一文彻底弄清Redis的布隆过滤器

    布隆过滤器(Bloom Filter)是一种空间效率极高的数据结构,用于快速判断一个元素是否在集合中.它能够节省大量内存,但它有一个特点:可能存在误判,即可能会认为某个元素存在于集合中,但实际上不存在 ...

  6. 使用wxpython开发跨平台桌面应用,实现程序托盘图标和界面最小化及恢复处理

    在前面随笔<基于wxpython的跨平台桌面应用系统开发>介绍了一些关于wxpython开发跨平台桌面应用的总体效果,开发桌面应用,会有很多界面细节需要逐一处理,本篇随笔继续深入该主题,对 ...

  7. 关于C++当中全局变量的释放问题

    一.由来 主要是在修改公司的一个MFC项目的时候遇到的问题,我在MFC页面的析构函数当中对一个全局图像变量进行了释放,具体如下: ai_engine_OCR::~ai_engine_OCR() { / ...

  8. c语言小练习——字符串长度、拷贝、拼接、比较

    /* 使用c语言知识实现下面程序: 1,实现strlen函数的功能 2,实现strcpy函数的功能 3,实现strcat函数的功能 4,实现strcmp函数的功能 不允许使用已有的str函数*/ 1 ...

  9. 【已解决】无法打开受保护的PDF

    笔者在使用三星笔记导入PDF时提示"无法打开受保护的PDF",经查询需要使用在线破解工具来破解,重新下载就可以了 方法一:在线破解网站(适用于文件较小的PDF) 这里提供两个破解在 ...

  10. 12.Kubernetes集群安全机制

    Kubernetes集群安全机制 概述 当我们访问K8S集群时,需要经过三个步骤完成具体操作 认证 鉴权[授权] 准入控制 进行访问的时候,都需要经过 apiserver, apiserver做统一协 ...