我很难在C中找出以下简单的for循环代码.
int j=20;
for(int i=0, j; i<=j ; i++, j--)
printf("i = %d and j = %d \n",i,j);
Run Code Online (Sandbox Code Playgroud)
打印输出为
i=0 and j=2
i=1 and j=1
Run Code Online (Sandbox Code Playgroud)
为什么它不是以j=20而是打印j=2并停止之后j=1.
但是当我使用这段代码时
int j=20;
for(int i=0, j=20; i<=j ; i++, j--)
printf("i = %d and j = %d \n",i,j);
Run Code Online (Sandbox Code Playgroud)
它开始正常
i=0 and j=20 upto ... i=9 and j= 11
Run Code Online (Sandbox Code Playgroud)
有什么东西我错过了吗?
你是.在for构造中声明j会创建一个新的(作用域)j,其值与外部不同.如果你没有初始化它,你会得到分配时在内存中发生的任何垃圾.
像这样的变量称为"自动"变量,并在程序的堆栈上分配.如果需要,可以分配更多的堆栈空间.当它们超出范围时(实际上当函数返回时),通过将它们全部弹回来清除它们.
当需要下一位自动存储时,会发生同样的事情,然后您可以获得在堆栈中留下的任何位模式作为新变量值.