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,而且我要现在在这里引用它,告诉编译器一声,不用报错
局部变量不能跨文件引用
普通全局变量与静态全局变量
静态全局变量用来解决重名问题,告诉编译器这个变量只能在当前文件使用,不会在其他文件中使用,这样不会担心重名问题,