动态变量与静态变量的区别

您所在的位置:网站首页 静态变量和动态变量 动态变量与静态变量的区别

动态变量与静态变量的区别

2024-07-12 22:40| 来源: 网络整理| 查看: 265

什么是局部变量:定义在函数中的变量 普通局部变量:定义时直接定义,或者在前面加上(auto)关键字 void func1(void) { int i = 1; i ++; printf(“i = %d\n”,i); } 局部变量i的解析:在连续三次调用func1,每次调用时,在进入func1中都会创造一个变量i,并且会给i赋予初值,然后i++时i加成2,然后printf打印出i的值2,然后func1本次调用结束,结束的同时杀死本次创造的变量i,这就是局部变量的生命周期。下次再调用函数func1时又会创造一个变量i;经历整个程序运算,最终在函数运行完退出时在杀死。

静态局部变量:静态局部变量在定义前加上关键字static

总结:1、静态局部变量与普通局部变量不同。静态局部变量也是定义在函数内部的,静态局部变量在定义前加上关键字static,静态局部变量所在的函数多次被调用时,只有第一次经历变量的定义初始化,以后多次调用时都不会有变量的定义和初始化,而是维持上一次调用执行后这个变量的值本次接着使用。 2、静态局部变量在第一次函数被调用时创造并且初始化,但是在函数退出时它不死亡,而是保持其值等待下一次被调用,下次调用时不再重新创造和初始化该变量,而是用上次留下来的值。 3、静态局部变量的这种特性跟全局变量有点类似,他们的相同点都是创造和初始化一次,以后调用的值保持上次的值不变,不同在于作用域不同。

全局变量:定义在函数外部的变量 普通全局变量:普通全局变量就是平时使用的,定义前不加任何的修饰词,普通全局变量可以在各个文件中使用,可以在项目内别的.c文件中被看到,所以要确保不能重名。

静态全局变量:静态全局变量就是用来解决重名的问题的,静态全局变量就是在定义前加上static关键字,告诉编译器这个变量只在当前文件中使用,在别的文件中绝对不会使用。

跨文件引用全局变量(extern):就是说在一个程序的多个.c源文件中,可以在一个.c文件中定义全局变量g_a,并且可以在另外一个.c文件中引用该变量g_a(引用前要声明)函数和全局变量在C语言中可以跨文件引用,也就是说他们连接范围是全局的,具有文件连接属性,总之意思就是全局变量和函数可以跨文件看到的,直接影响就是在a.c和b.c中各自定义了函数func1,名字相同,但是内容不同,编译报错。

局部变量和全局变量的对比: 1、定义时没有初始化,则局部变量的值是随机的,而全局变量的值是0; 2、在使用范围上:全局变量具有文件作用域,而局部变量则只有代码块作用域, 3、生命周期上:全局变量是在程序开始运行之前的初始化阶段就诞生,到整个程序退出时才死亡,而局部变量在进入局部变量所在的代码块时诞生,在该代码块退出时死亡。 4、变量分配位置:全局变量分配在数据段上,而局部变量分配在栈上。

动态全局变量:作用域为整个项目,即最终编译成可执行文件的所有文件中均可使用动态全局变量。生命周期从程序开始带程序退出,贯穿整个运行时间。无显示初始化时默认初始值为0;

静态全局变量:作用域为当前文件,从定义/声明位置到文件结尾,声生命周期从程序运行到程序结束,贯穿整个程序。无显示初始化时默认为0,

动态局部变量:作用域为当前函数,从定义位置到所在的{}的结束位置。生命周期从函数调用到函数退出,无显示初始化时默认初始化值为随机值。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3