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

posted @ 2024-12-19 15:17  RAY5-2  阅读(47)  评论(0)    收藏  举报