c – 变量类型的初始化和更新
发布时间:2020-12-16 10:13:19 所属栏目:百科 来源:网络整理
导读:我知道静态变量只在程序的生命周期内初始化一次(参见 here以供参考).此外,静态变量在函数调用之间保持其值.然后如何修改静态变量? 例如,在以下代码段中如何修改“a”: #include stdbool.hvoid foo(){ static int a; printf("%dn",a); a++; printf("%dn",
我知道静态变量只在程序的生命周期内初始化一次(参见
here以供参考).此外,静态变量在函数调用之间保持其值.然后如何修改静态变量?
例如,在以下代码段中如何修改“a”: #include <stdbool.h> void foo(){ static int a; printf("%dn",a); a++; printf("%dn",a); } int main() { foo(); foo(); return 0; } 相反,如何修改非静态变量?更具体地说,如何在下面的代码中修改“a”? #include <stdbool.h> void foo(){ int a = 2; printf("%dn",a); } int main() { foo(); foo(); return 0; } 解决方法
在第一个示例中,静态变量具有局部范围,但与全局变量具有相同的生命周期,并在程序启动时初始化一次.当你想要产生副作用时,你会这样做
(某些东西被初始化,全局函数调用计数器……:调用子例程即使没有返回任何内容也有效…) 它在每次调用时都具有相同的地址(这意味着您可以返回其地址并从某处修改它). 在第二个示例中,您定义了一个自动变量,每次都分配和初始化.它可能有一个不同的地址,具体取决于调用链(在所有调用中,递归,线程,变量保证是唯一的,并且不能被其他调用/线程修改:没有边缘效应,reetrant) 在main()上没有太大的区别,但是如果你把它放在子程序中,在第一种情况下,2次连续调用将产生不同的结果(2,3,然后是3,4),而在第二种情况下,连续2次通话将产生相同的结果(2,3次两次) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |