gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:19:10 25 4
gpt4 key购买 nike

在我运行这段代码之前,我以为我已经理解了如何正确地增加 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com