2016-03-23 60 views
-6

我发现一个问题,在互联网这样的,有一个ç程序,它喜欢 -
为什么printf()打印这样的东西?

int main(){ 
    int a = 123; 
    printf("%d", printf("%d",a)); 
    return 0; 
} 

我在代码块运行这个程序,并找到导致。
我的问题是,为什么printf()的行为是这样的?

+0

好奇:你期望打印什么? – chux

+0

我没想到什么。我只是在代码块中运行代码并找出这样的输出。所以我很好奇,为什么? @chux –

回答

5

参见printf是返回int的函数。其中int是印数characters

这是一个printf原型

int printf(const char *restrict format, ...) 

按照您的程序:

printf("%d", printf("%d",a)); 

printf("%d",a)其中a123,所以它打印123并返回3
printf("%d", printf("%d",a));成为printf("%d",3);所以,冲印3单独

所以你的输出是:
1233

2

打破它,理解它。 printf函数的返回值 成功时,是成功写入的字符总数。

printf("%d",a)成功写入3个字符,然后返回值作为第二个参数被传递到原始呼叫作为一个参数被评估

printf("%d", 3); 

printf被传递,然后其结果被传递在所述外printf

1

printf总是返回字符数。由于a = 123意味着3个字符,所以输出即为1233.您将从这个例子中理解。

int main(){ 
    int a = 123; 
    int b=printf("%d",a); 
    printf("\n%d", b); 
    return 0; 
} 
相关问题