加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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次两次)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读