2 xiongqiangwin1314 xiongqiangwin1314 于 2014.10.10 20:29 提问

static静态变量问题,菜鸟求大家伙给个答案

int main(void)
{
static int i=5;
if(--i)
{
main();
cout<<i<<endl;
}
}
为什么输出结果是0000?
菜鸟求详解啊!么么哒

3个回答

ftz514396491
ftz514396491   2014.10.11 10:32
已采纳

4,3,2,1,0一共5个数,因为0的时候不进if了所以递归终止了,然后返回到上一次递归也就是i=1的时候,但是这时候实际上i的值是0了所以打印0并且换行,以此类推,
i=2的递归,打印 0 换行
i=3的递归,打印 0 换行
i=4的递归,打印 0 换行
所以是4次0

首先你得理解递归的意思

xiongqiangwin1314
xiongqiangwin1314 自己查了些资料再回头看,确实是这样
大约 3 年之前 回复
N_BenBird
N_BenBird   2014.10.10 21:35

代码好高级的样子,点在 静态变量和递归;

运行:

i = 5;

if(5) i = 4
进入main
if(4) i = 3
进入main
if(3) i = 2
进入main
if(2) i = 1
进入main
if(1) i = 0
进入main
if(0)
不执行
打印 0 换行
打印 0 换行
打印 0 换行
打印 0 换行
结束

可以使用 gdb 调试
或者 在VC上设置断点调试

xiongqiangwin1314
xiongqiangwin1314 查了点资料,明白了,谢谢你
大约 3 年之前 回复
N_BenBird
N_BenBird 不执行仅仅是那个 if(0)的,然后就要递归弹栈执行前面的。
大约 3 年之前 回复
xiongqiangwin1314
xiongqiangwin1314 为什么不执行之后还能打印0换行?
大约 3 年之前 回复
xuexiacm
xuexiacm   2014.10.24 14:41

static静态成员变量只在第一次声明时定义。
在以后的函数调用中,实际操纵的都是同一块内存区域,而非其他普通变量的副本。
所以....

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!