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

静态变量如何区分初始化与赋值?结合C语言代码求解相关疑问

运行结果

最终打印输出的x值是 1。

结果解释

逐次捋using_static的执行逻辑就能很容易看懂:
每次调用这个函数时,都会按顺序执行以下三步:

  1. 跳过静态变量x的初始化步骤(静态变量初始化仅执行一次)
  2. 执行赋值语句x = 0,把x重置为0
  3. 执行x++,x变成1后返回
    所以不管这个函数被调用多少次,返回值永远是1。main函数里先循环调用了5次,没有接收返回值,最后调用using_static传给printf的返回值还是1。

关于静态变量初始化的疑问解答

你问题里提到的「不会重复给静态变量赋值为0」,指的是静态变量的初始化操作,和你代码里单独写的x = 0赋值语句是完全不同的两个概念:

  • 静态变量的存储周期和整个程序的运行周期一致,它的初始化(包括static int x;这种默认初始化为0,或者static int x = 0;这种显式写在声明里的初始化)只会在程序启动时执行唯一一次,后续调用函数时不会重复执行初始化,变量会保留上一次调用结束后的取值。
  • 你代码里单独写的x = 0是普通赋值语句,不属于初始化流程,所以每次调用函数都会正常执行,把x重置为0。

如果想实现“每次调用x累加1”的效果,把x = 0这行删掉,或者直接把初始化写在声明里即可:

int using_static()
{
   static int x = 0; // 这个初始化仅执行一次
   x++;
   return (x);
}

修改后最终输出结果会变成6。


内容的提问来源于stack exchange,提问作者Olawale IPADEOLA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:45:03