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