我在codeblocks中运行了以下代码并得到了输出:
10 20
10 20
int main()
{
int i=10,j=20;
printf("%d %d\n",i,j);
printf("%d %d",i);
return 0;
}
第二次20的原因是什么?
答案 0 :(得分:4)
由于您第二次呼叫printf
而没有干预代码,j
的值仍然在堆栈中,从上一次调用开始。
当然,你不应该依赖这种行为。仅仅因为你没有看到这个错误并不意味着它不在那里。 : - )
答案 1 :(得分:3)
读取vararg列表的末尾是未定义的行为,因此第二个20的原因是纯粹的运气:你的代码可能打印了任何整数,甚至崩溃。