为什么以下C代码提供这样的输出?

时间:2012-03-02 15:24:54

标签: c

我在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的原因是什么?

2 个答案:

答案 0 :(得分:4)

由于您第二次呼叫printf而没有干预代码,j的值仍然在堆栈中,从上一次调用开始。

当然,你不应该依赖这种行为。仅仅因为你没有看到这个错误并不意味着它不在那里。 : - )

答案 1 :(得分:3)

读取vararg列表的末尾是未定义的行为,因此第二个20的原因是纯粹的运气:你的代码可能打印了任何整数,甚至崩溃。