C语言局部变量,全局变量,静态变量,动态变量的区别与联系

变量与常量

变量:指的是在程序运行过程中,可以通过代码使他的值改变的量。

常量:程序运行过程中不会改变的量。

局部变量

局部变量:定义在函数中的变量。

全局变量

全局变量:定义在函数外面的变量。

#include<stdio.h>

int g_a;              //定义在函数外面叫全局变量

int main(void)
{

    int a;            //定义在函数里面叫局部变量
    
    return 0'

}

局部变量与全局变量的对比:

(1)定义时没有初始化局部变量值是随机的,而全局变量值是0。

(2)全局变量具有文件作用域,而局部变量只有代码块作用域(工作的区域)。

(3)生命周期上:全局变量在程序开始运行之前的初始化阶段就诞生了,到整个程序结束退出的时候才死亡,而局部变量在进入局部变量所在代码块时诞生,在该代码块退出的时候死亡。

(4)变量分配位置:全局变量分配在数据段(数据段存的是数)上,而局部变量分配在栈上面

判断一个变量能不能使用,有没有定义,必须注意两点:第一,该变量定义的作用域是否在当前有效,是否包含当前位置。第二:变量必须先定义后使用。

#include<stdio.h>

void func(void);
//全局变量的特点:在整个文件中所有函数内都可以访问,访问的都是该变量本身,如果你在之前某个函数中更改了他的值,则后面在引用时他的值就是前面更改之后的值
int a;

int main(void)
{
    printf("%d",a);
    func();
    printf("%d",a);
    a = a + 1;
    printf("%d",a);
    
    return 0;
}


void func(void)

{
    a = 100;
}

C语言中static静态局部变量和非静态局部变量的区别

总结:

(1)静态局部变量和普通局部变量不同,静态局部变量所在的函数在调用多次时,只有第一次才会经历变量第一和初始化,以后多次调用时不再定义和初始化,而是维持之前上一次调用时执行后这个变量的值,本次接着来使用。

(2)静态局部变量在第一次函数被调用时创造并初始化,但在函数退出时不会死亡,而是保持其值等待函数下一次被调用。下一次调用时不在重新创造和初始化该变量,而是直接使用上一次留下的值位基础进行操作。

普通局部变量

普通的局部变量定义时直接定义,或者在定义前面加auto

跨文件变量引用需要声明   extern

想在b.c中直接引用a.c中定义的全局变量g_a,必须在b.c中引用前先声明g_a,如何声明变量?extern int g_a;

extern关键字

extern int g_a;这句话是一个全局变量g_a的声明,这句话告诉编译器,我在外部某个地方定义了一个全局变量int g_a,而且我要现在在这里引用它,告诉编译器一声,不用报错

局部变量不能跨文件引用

普通全局变量与静态全局变量

静态全局变量用来解决重名问题,告诉编译器这个变量只能在当前文件使用,不会在其他文件中使用,这样不会担心重名问题,

发布了14 篇原创文章 · 获赞 0 · 访问量 416

猜你喜欢

转载自blog.csdn.net/LIGUOZHENLX/article/details/104174831