解释以下代码片段?

时间:2013-09-06 07:10:16

标签: c printf

int main()
{   
    int a, b, c;
    a = 10;
    b = 20;
    c = printf("%d", a) + ++b;
    printf("\n%d", c);
}

上述程序的输出似乎是23,但我不知道它是如何获得的。任何人都可以对此有所了解吗?

3 个答案:

答案 0 :(得分:4)

printf有一个返回值,即它打印的字符总数。

语句printf("%d",a)将打印10,这意味着此处printf的返回值为2

其余的很容易:

c=printf("%d",a)+ ++b;

c的值为2 + 20 + 1,即23

答案 1 :(得分:1)

这里输出将是两个不同的整数,用于两个不同的printf语句。对于第一个printf语句,代码打印10,然后当此printf语句参与某些赋值语句时,它将被视为字符数打印即 2 。然后将其添加到++b,即21 PRE-INCREMENTED )。因此输出为23(2 + 21)。 整个输出看起来像这样:

10
23

答案 2 :(得分:0)

printf返回以整数形式打印的字符数。因此,当您打印10时,它将返回2。 所以现在

c = printf(“%d”,a)+ ++ b; 将成为

c = 2 + ++ b;

由于值为20的b预先递增,因此将变为

C = 2 + 21 因此c = 23