静态变量如何区分初始化与赋值?结合C语言代码求解相关疑问
运行结果
最终打印输出的x值是 1。
结果解释
逐次捋using_static的执行逻辑就能很容易看懂:
每次调用这个函数时,都会按顺序执行以下三步:
- 跳过静态变量
x的初始化步骤(静态变量初始化仅执行一次) - 执行赋值语句
x = 0,把x重置为0 - 执行
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
相关产品推荐
相关产品推荐

