首页 > 其他分享 >TheScope, Visibility and Lifetime of Variables

TheScope, Visibility and Lifetime of Variables

时间:2024-12-19 15:35:11浏览次数:6  
标签:count TheScope int Variables include static func Lifetime main

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 的值也不会丢失。

标签:count,TheScope,int,Variables,include,static,func,Lifetime,main
From: https://www.cnblogs.com/LuKemi3/p/18617310

相关文章

  • Task04 :Variables and Functions
    变量在Python中,变量是用来存储数据的。它不需要像C语言中需要对变量的类型进行定义,Python会根据赋值自动确认变量的类型。变量的命名规则:必须以字母或下划线开头。只能包含数字、字母、下划线。变量只是一个名称,用于与数据进行联系。定义变量时,现在内存空间中申请一块地......
  • JavaScript初级课程 variables
    下载node。1.申明变量variables.jsletmessage="Hello!";message="World";console.log(message);nodevariables.js2.申明不会变的变量constCOLOR_GREEN="green";console.log(COLOR_GREEN)3.数据类型DataTypes=[number,BigInt,string......
  • MySQL variables:max_connections&&max_user_connections
    结论1:max_connections变量的意义是限制当前mysqlserver中允许同时连接的不同用户数,并不对相同用户的多次连接进行限制结论2:max_user_connections变量的意义是限制当前mysqlserver中允许同时连接的相同用户的连接数,不对连接的不同用户数进行限制结论3:对max_connections变量的......
  • MySQL variables:binary-as-hex
    不注意到这个变化的话,还挺折腾人的。在MySQL8.0.19ReleaseNotes里,有这么一段话:Whenthemysqlclientoperatesininteractivemode,the--binary-as-hexoptionnowisenabledbydefault.Inaddition,outputfromthestatus(or\s)commandincludesthislinewhenth......
  • [Typescript] Using Variables Declared Elsewhere
    The declare keywordinTypeScriptallowsyoutospecifytypesforglobalvariables.Wheneveryouuseit,anambientcontextiscreated,whichmeansthatthevariableisinjectedwithoutneedingtoprovideanimplementation.Here'showwewoulduse de......
  • Oracle Record Variables 记录变量
    OracleRecordVariables(Oracle记录变量)是Oracle数据库编程中PL/SQL语言的一个关键特性,它允许开发者将多个相关的、分离的、基本数据类型的变量组合成一个复合数据类型,类似于C语言中的结构体(STRUCTURE)。这种复合数据类型被称为RECORD(记录)。在PL/SQL中,记录变量提供了一种非常......
  • Cobra - How to avoid access global variables in a global variable or init() func
    在同一个package中的init()函数是按照所在文件文件名的字母顺序执行的,如果一个文件排在root.go之前,那么在其中字义的<文件名>Cmd全局变量赋值时将不能使用在root.go中初始化并赋值的全局变量(如globalflags),同样在其init()函数中也不能使用那些全局变量,如果使用则会报空指针错误。......
  • [Bash] Environment variables
    Environmentvariablesaredefinedbytheshellandshellscripts.Tolistthecurrentenvironmentvariables,typeexport:~$exportdeclare-xDISPLAY=":0"declare-xHOME="/home/substack"declare-xHUSHLOGIN="FALSE"declar......
  • Go - Using error variables to differentiate between input types
     packagemainimport("fmt""os""strconv")funcmain(){arguments:=os.Argsiflen(arguments)==1{fmt.Println("Notenougharguments")}vartotal,nInts,nFloatsint......
  • CMake Professtional-2 Variables
    set(varNamevalue...[PARENT_SCOPE])cmake中所有的值都是string,如果同时添加多个值,会自动添加;set(myVarabc)#myVar="a;b;c"set(myVara;b;c)#myVar="a;b;c"set(myVar"abc")#myVar="abc"set(myVarab;c)#myVar=&q......