You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中static静态变量为何呈现两种不同值:初始为5,调用函数后变为1?

为什么static变量count会呈现两种不同的值?

首先来看你提供的代码:

#include<stdio.h>
static int count=5;
int fun() {
 count = 0;
 count++;
 return count;
}
int main() {
 printf("%d ", count);
 printf("%d ", fun());
 printf("%d ", fun());
 printf("%d ", count);
 return 0;
}

程序的输出结果是:

输出结果:5 1 1 1

你的问题是:

问题:为何count变量会呈现两种不同的值?初始值为5,调用函数后却变为1?


咱们一步步拆解这个问题,核心点在于static变量的特性,再加上你函数里的操作逻辑:

  • static全局变量的本质:你定义的static int count=5是全局作用域的static变量,它的生命周期贯穿整个程序运行过程,而且只会被初始化一次(就是程序启动时设为5)。不过这里的关键不是它的持久化特性,而是你在函数里主动修改了它的值。

  • 程序执行的完整流程:

    1. 程序刚启动时,全局static变量count被初始化为5,这时候还没有任何函数修改它。
    2. 第一个printf直接输出count的当前值,也就是5——这是它的初始状态,还没被fun()触碰过。
    3. 第一次调用fun():函数第一行就执行了count = 0;,直接把原来的5覆盖成0,紧接着count++让它变成1,然后返回这个值。这时候全局的count已经被改成1了。
    4. 第二次调用fun():同样的逻辑,先把count重置为0,再加1变成1,返回1。哪怕count本来已经是1,这一步也会先把它打回0再递增,所以输出还是1。
    5. 最后一个printf输出的是经过两次fun()修改后的count值,自然就是1。
  • 为什么会出现“两种值”?
    初始的5是count未被函数修改时的初始值,而调用fun()后,函数里的count = 0;直接覆盖了初始值,后续每次调用函数都会重复“重置为0→加1”的操作,所以之后的值全是1。如果把函数里的count = 0;删掉,你就能看到static变量“跨函数调用保持值”的特性:第一次调用fun()会让count从5变成6,第二次变成7,输出就会是5 6 7 7,这才是static变量持久化的典型表现。

说白了,不是static变量的特性导致了两种值,而是你在函数里主动重置了它的初始值,才出现了前后不同的结果~

内容的提问来源于stack exchange,提问作者Deepjyoti Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 20:34:04