注:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。 当static用来修饰全局变量的时候,它就改变了全局变量的作用域(在声明他的文件之外是不可见的...
总结:局部变量被static修饰后,将存储在静态区,出作用域后将不会被销毁,而是保留在静态区,生命周期改变(本质上改变了存储类型),这时它的生命周期就是程序的声明周期。 (2).static修饰全局变量 还是通过两段代码来解释: 代码语言:javascript 代码运行次数:0 复制 Cloud Studio代码运行 //代码1//add.cint g_val=2...
局部变量:在函数内部定义的变量; 全局变量:在函数外部定义的变量,少用,不安全; 普通全局变量: 生命周期:程序运行开始创建,程序结束退出才销毁;可理解为其生命周期与整个程序是等价的; 静态全局变量: 生命周期:程序运行开始创建,程序结束退出才销毁; 默认值:静态(动态)全局变量都为0 示例代码: intg_a=20;intg_...
如果一个变量只在这个函数中用到,那么就定义为局部变量,用完就销毁,节约内存 静态局部变量(Static Local Variables): 使用static关键字在函数内部声明的变量称为静态局部变量。 静态局部变量与普通局部变量相比,在生存期和作用域上有所不同。 静态局部变量的生存期贯穿整个程序的执行过程,而不是仅在函数执行期间。(退...
将局部变量存储到全局数据区,使它不会随着函数调用结束而被销毁。 二、const的用法 1、定义 我们经常将 const 变量称为常量(Constant)。创建常量的格式通常为:const type name = value; 另外建议将常量名的首字母大写,以提醒程序员这是个常量。 常量一旦被创建后其值就不能再改变,所以常量必须在定义的同时赋值(...
在调用test1函数时 ,由于i为局部变量,在test1函数执行结束后,其生命周期也就结束了,在每次调用test1函数时,i都会被赋值为0,因此输出结果为5个1;而局部变量i经static修饰后其生命周期变长,在离开作用域时并不会被销毁,当test2函数调用时,变量i的值为上次函数结束调用结束时的值,因此输出结果为1-5。
通过添加断点可以看出,在第一个printf之后,局部变量地址存储的值就被初始化了, 而如果将printf换成“ *int a=0;a++;”就不会导致初始化, 这说明,子函数的局部变量被销毁后,主函数后续执行的操作可能会导致初始化,也可能不会, 具体的解释需要更底层的东西,之后学习了会更新…… ...
局部变量:保持内容的持久性 这里的一个重要应用就是在一些子程序中,有时有必要保持局部变量在函数调用结束后不被销毁(即分配给局部变量的空间不回收,意味着变量保持原值),这时static的作用就显得重要了。 原理就是,本来操作系统将局部变量的空间分配在栈区,函数调用结束后就会回收(这样可以保证不用的资源不占用空间,...