printf返回打印字符数的机制及GCC下代码结果11的疑问
为什么变量
a的值是11而不是18? 嘿,我来帮你理清这个困惑——你把两次printf的输出字符数混在一起啦!咱们一步步拆解这段代码:
int a=printf("made,%d,easy",printf("Lucknow")); printf("%d",a);
先执行内层的
printf("Lucknow")
C语言规定,函数的参数会在函数本身执行前完成计算。所以外层printf还没开始打印,内层的printf先跑起来:- 它会在屏幕上打印字符串
Lucknow,这个字符串一共7个字符(L-u-c-k-n-o-w)。 - 根据
printf的规则,它会返回成功打印的字符总数,所以这个内层printf的返回值是7。
- 它会在屏幕上打印字符串
再执行外层的
printf,并赋值给a
外层printf拿到内层返回的7,把格式串里的%d替换成7,然后打印made,7,easy。咱们数一下这个字符串的字符数:m、a、d、e、,、7、,、e、a、s、y——刚好11个字符。
所以外层printf的返回值是11,这个值被赋值给了变量a。最后打印
a的值
最后的printf("%d",a)会把a的11打印出来。
你之前误以为a是两次打印的字符总和(7+11=18),但实际上a只接收了外层printf的返回结果——内层printf的返回值只是作为参数传递给外层,并没有被a保存下来哦。
内容的提问来源于stack exchange,提问作者Radha Gogia
相关产品推荐
相关产品推荐

