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. Web渗透04_密码破解

    账号密码是任何一个系统都必备的要素. 弱密码 123456 654321 112233 admin 等等 默认密码 Tomcat控制台: tomcat/tomcat 明文传输 http的明文传输,可以 ...

  2. Robust Loop Closure by Textual Cues in Challenging Environments

    arxiv | 南洋理工大学开源 基于文本线索实现复杂环境中的鲁棒闭环检测 [Robust Loop Closure by Textual Cues in Challenging Environmen ...

  3. C语言(从入门到入土)

    1.C语言整体上需要记住的 总体上必须清楚的: 1)程序结构是三种: 顺序结构 , 循环结构 (三个循环结构), 选择结构 (if 和 switch) 2)读程序都要从main()入口, 然后从最上面 ...

  4. Lncpc2024 游记

    Day 0 7:30 起的比较早,和同学xjt约好了一起写作业,起来之后感觉身上有点冷,之前考CSP的时候就有点感冒,所以决定洗个热水澡,出来就写作业了. 9:30 学习状态还可以,比较沉浸式,这个时 ...

  5. C# 请求 form-data格式的 接口 POSTMAN form-data

    HttpClient _httpClient = new HttpClient(); var postContent = new MultipartFormDataContent(); string ...

  6. CSP-S2024 游记

    CSP-S2024 游记 Day 0 晚上放假回家了,宵夜整了点麦当当,就去睡了. Day 1 本来想多睡会,结果到 \(7:10\) 惊醒了,发现为防止早读迟到已经进化出自动起床功能了. 准备睡回笼 ...

  7. P8392 BalticOI 2022 Day1 Uplifting Excursion

    P8392 BalticOI 2022 Day1 Uplifting Excursion 贪心加动规,好题,这两个甚至完全相反的东西可以融进一道题-- 思路 物品较少,贡献较小,体积较小,但总体积巨大 ...

  8. 2023NOIP A层联测9 风信子+P2048 【NOI2010】 超级钢琴 2023

    P2048 [NOI2010] 超级钢琴 2023NOIP A层联测9 风信子 一年 OI 一场空,一道原题见祖宗-- Ps:超级钢琴是风信子的前置题. 超级钢琴 题意 在一段序列上,选择长度为 \( ...

  9. 不错的PHP扩展

    不错的PHP扩展 ext name ext description ds data structure 提供list hash queue等数据结构 igbinary 数据压缩(速度快 压缩后内容小) ...

  10. 23、表空间及段区块_1(段区块管理、pctfree、数据块结构、行迁移、高水位)

    oracle数据库的物理存储结构 1.spfile:参数文件 2.controlfile:控制文件 3.datafile:数据文件 4.redo log 5.arch:归档日志 oracle数据库的d ...