我在互联网上发现了一个问题,就是有一个 C 程序,就像 -
int main(){
int a = 123;
printf("%d", printf("%d",a));
return 0;
}
我在 Codeblocks 运行此程序,并找到结果 1233 。
我的问题是为什么printf()就像这样?
答案 0 :(得分:5)
请参阅printf
是一个返回int
的函数。其中int
是characters
打印的数量。
这是printf
原型
int printf(const char *restrict format, ...)
根据您的计划:
printf("%d", printf("%d",a));
<printf("%d",a)
其中a
为123
,因此打印123
并返回3
printf("%d", printf("%d",a));
变为printf("%d",3);
因此它仅打印3
印刷品
所以你的输出是: 1233
答案 1 :(得分:2)
分手以理解它。 printf函数的返回值 成功时,是成功写入的字符总数。
printf("%d",a)
成功写入3个字符,然后将该值作为第二个参数返回以传递给原始调用
printf("%d", 3 );
在评估参数时传递第二个printf
,然后在外部printf
中传递其结果。
答案 2 :(得分:1)
Printf始终返回字符数。因为a = 123意味着3个字符,所以输出结果为1233.你将从这个例子中理解。
select chargeid,
totalamount-isnull(lag(amount) over(partition by chargeid order by chargeid),0) as amount,
payamount as pay
from (
select t2.chargeid
,t1.totalamount
,sum(t2.payamount) over (
partition by t2.chargeid order by t2.paymentid
) as amount,
t2.payamount
from tblCharge t1
join tblpayment t2 on t1.chargeid = t2.chargeid
) a