c - 自增int和静态int的意义: C

标签 c static increment

在我运行这段代码之前,我以为我已经理解了如何正确地增加 C 中的值。正如我们从输出中看到的,static_var 不断增加。然而,var 的情况并非如此。我认为 var 也应该每次都继续增加 1。

如果我将 int var 更改为 static int var,那么 var 确实会继续递增。也许我的想法不正确。如果有人能够弄清楚“为什么” var 不继续递增,那就太棒了!

#include <stdio.h>

void function() { 
    int var = 5;
    static int static_var = 5; 
    printf("\t[in function] var = %d\n", var);
    printf("\t[in function] static_var = %d\n", static_var);
    var++; 
    static_var++; 
}

int main() { 
    int i;
    static int static_var = 1337; 
    for(i=0; i < 5; i++) { 
        printf("[in main] static_var = %d\n", static_var);
        function(); 
    }
}

输出:

[in main] static_var = 1337
[in function] var = 5
[in function] static_var = 5
[in main] static_var = 1337
[in function] var = 5
[in function] static_var = 6
[in main] static_var = 1337
[in function] var = 5
[in function] static_var = 7
[in main] static_var = 1337
[in function] var = 5
[in function] static_var = 8
[in main] static_var = 1337
[in function] var = 5
[in function] static_var = 9

最佳答案

问题在于范围。当您在函数中定义变量 var 时,它会为使用该名称的 block 创建一个新变量。编译器会将函数中对 var 的所有引用映射到新变量。它以这种方式工作,因为该语言假设如果您创建了一个具有较小作用域的同名新变量,那么您一定是认真的。如果您想访问 main 和函数中的静态变量,则需要在任一函数之外的全局范围内声明它。

关于c - 自增int和静态int的意义: C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25337347/

相关文章:

c - 使用 fgets 删除字符串

c - 使用 CUNIT 进行测试 - 演练分析/代码覆盖率

c++ - 强制在某个静态字段之前初始化全局变量

c++ - C++ 类的 iota 增量 vector

c - 在包含目录中找不到 Visual Studio Code 包含文件 (Windows 10)

c - 外部变量

java - 我应该在派生类中将 'count' 设置为静态吗?如何访问它

static - Nuxt js 全静态动态页面,payload undefined

java - 在循环中使用按钮调用方法

Excel宏-for循环增量