【问题标题】:Why the Output is 15 15 instead of 15 20?为什么输出是 15 15 而不是 15 20?
【发布时间】:2016-08-31 04:44:11
【问题描述】:
#include<stdio.h>

void print();

int main(){ 

    print();    
    print();    
    return 0;    
}

void print(){

    static int x;    
    x=10;    
    x+=5;    
    printf("%d\t",x);

}

输出 15 15

【问题讨论】:

  • 请格式化您的代码。
  • @Blorgbeard 你能告诉输出吗?
  • 他的意思是:SO 有很好的 markdown 来正确格式化源代码。您想在之前在此处发布代码时转到帮助中心了解这些内容。举个例子,看看我答案中的两行是如何格式化的!
  • static 变量只初始化一次。

标签: c static


【解决方案1】:

您的代码显示:

 x = 10;
 x = 15;

然后打印 x。

然后你调用那个函数两次。

为什么你又认为第二次打印会产生不同的结果?和第一个相比?!

你看,你首先分配:10。加 5。为什么会导致 20?

提示 - 尝试将您的代码更改为:

static int x = 10;
x += 5;

长话短说:重新赋值与重新初始化不同!

【讨论】:

  • 因为 x 是静态的,它应该首先打印 15,然后相应地,因为 x 是静态的,它应该打印 20 还是不打印?
  • 查看我的更新答案。关键是:您没有“重新初始化”。您正在重新分配。那不是一回事。你知道,你期望x = x + 5 给 x 一个新值;但是你认为x = 10 没有效果?
【解决方案2】:

我认为您对静态变量的重新分配和重新初始化感到困惑。您一定在某处了解到,无论何时调用该函数,静态变量都不会重新初始化自身。因此,您期待答案 15 和 20。

但问题是你每次都用 10 重新分配 x 的值。如果你像下面这样修改你的代码,那么你可以达到你的预期。

static int x=10;
x+=5;

这里,x 仅在第一次被初始化为 10。之后,对于每个函数调用,它只会增加 5。

希望这会有所帮助并澄清您的疑问。

【讨论】:

  • 谢谢我现在知道了
  • 不客气。投票有用的答案总是可以接受的。
【解决方案3】:

这里将static 变量声明(初始化)为x,然后每次分配的值10 未初始化。

因此,您的程序 1515 的输出将显示出来。

初始化和赋值都是不同的。请阅读此stack overflow question

我希望这能帮助你,让你的疑惑一扫而光。

【讨论】:

  • 它是静态的,所以 x 不会一次又一次地重新初始化
  • @DhruvBhardwaj 're-initialize' 和 're-assign' 是不同的东西。
  • 你能用更简单的方式解释一下吗?
  • @M.S Chaudhari 但我的编译器,即 Dev C++ 给出 15 15
  • @DhruvBhardwaj 相同的 o/p 15 20
猜你喜欢
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 2013-05-26
相关资源
最近更新 更多