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

为何两个C语言示例中static静态存储表现存在差异?

函数内static变量的声明与初始化逻辑解析

第一个示例报错原因

在main函数的同一个作用域内,你重复声明了同名的static int i,C语言禁止同一作用域内存在重复定义的同名变量,因此编译器抛出错误:error: redefinition of 'i'——这个规则对普通局部变量同样适用,和变量是否为static无关。

第二个示例的输出逻辑解答

你混淆了static变量的声明初始化和变量访问的区别:函数内部的static变量,其初始化语句只会在程序第一次执行到该代码位置时运行一次,后续调用函数时会直接跳过初始化步骤,复用之前已经分配好的变量值。

具体执行流程:

  1. 第一次调用increment函数时,执行static unsigned int counter = 0;:为counter分配内存并初始化为0,接着执行counter++将其变为1,打印输出1。
  2. 后续每次调用increment,程序会跳过初始化语句,直接读取内存中已存在的counter值,执行自增后打印,因此输出依次是2 3 4 5。

核心要点:

  • static变量的生命周期覆盖整个程序运行阶段,不会像普通局部变量那样在函数调用结束后销毁。
  • 函数内的static变量初始化仅执行一次,后续调用仅对已有变量进行操作。

内容的提问来源于stack exchange,提问作者Paper Plane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:50:26