C 为什么输出是15 15而不是15 20? #包括 作废打印(); int main(){ 打印(); 打印(); 返回0; } 作废打印(){ 静态int x; x=10; x+=5; printf(“%d\t”,x); }

C 为什么输出是15 15而不是15 20? #包括 作废打印(); int main(){ 打印(); 打印(); 返回0; } 作废打印(){ 静态int x; x=10; x+=5; printf(“%d\t”,x); },c,static,C,Static,输出15您的代码显示: #include<stdio.h> void print(); int main(){ print(); print(); return 0; } void print(){ static int x; x=10; x+=5; printf("%d\t",x); } 然后打印出x 然后调用该函数两次 为什么你认为第二次印刷会产生不同的结果;和

输出15

您的代码显示:

#include<stdio.h>

void print();

int main(){ 

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

void print(){

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

}
然后打印出x

然后调用该函数两次

为什么你认为第二次印刷会产生不同的结果;和第一个相比

你看,你从分配:10开始。加5。为什么会有20个呢

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

 x = 10;
 x = 15;

长话短说:重新分配与重新初始化不同

此处
static
变量声明(初始化)为
x
,然后每次
10
未初始化时分配值

因此,将显示程序
15
15
的输出

初始化和赋值都是不同的。请看这个


我希望这能帮助您澄清您的疑问。

我认为您对重新分配和重新初始化静态变量感到困惑。您一定在什么地方了解到,无论何时调用函数,静态变量都不会重新初始化自身。因此,您希望得到答案15和20

但问题是你每次都在给x赋值10。如果您像下面这样修改您的代码,那么您就可以实现您所期望的

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


希望这将有助于澄清您的疑问。

请格式化您的代码。@Blorgbeard您能告诉我输出吗?他的意思是:所以有很好的标记来正确格式化源代码。在这里发布代码之前,您希望转到帮助中心了解这些信息。作为一个例子,看看我的答案中的两行是如何格式化的!
static
变量的可能重复项仅初始化一次。由于x是静态的,它应首先打印15,然后相应地,由于x是静态的,它应打印20或不打印?请参阅我的更新答案。关键是:您不是在“重新初始化”。您正在重新分配。这不是一回事。你知道,你期望
x=x+5
给x一个新值;但是您希望
x=10
不会产生任何效果?它是静态的,因此x不会再次初始化并重新启动again@DhruvBhardwaj“重新初始化”和“重新赋值”是不同的事情。你能用更简单的方式解释吗?@ M.S.ChordHARI,但是我的编译器,即DEV C++给出了15。15@DhruvBhardwaj同样的o/p 1520谢谢我现在知道了不客气。投票选出有用的答案总是可以接受的。
static int x=10;
x+=5;