请教C语言递归print函数中逗号运算符作用及x=55输出BC的原理
问题解答
1. 逗号的作用
这里的逗号是C语言的逗号运算符,是C语言中优先级最低的运算符,遵循左结合规则:
- 会先执行左侧的
print(x / 26)表达式,等待递归调用完全返回后,再执行右侧的putchar((x % 26) + 'A')语句 - 整个逗号表达式的最终返回值是右侧表达式的返回值,这段代码里仅利用了逗号运算符的顺序执行特性,效果等价于把两个语句放在大括号组成的代码块里:
if (x--) { print(x / 26); putchar((x % 26) + 'A'); }
2. x=55时输出BC的运行逻辑
首先明确x--是后置自减运算符:if(x--)判断的是自减前的x值,判断完成后x会立刻减1再执行后续代码,递归调用过程如下:
- 第一层调用:print(55)
if判断自减前x=55非零,条件成立,x自减为54,先执行逗号左侧的递归调用print(54 / 26) = print(2) - 第二层调用:print(2)
if判断自减前x=2非零,条件成立,x自减为1,先执行逗号左侧的递归调用print(1 / 26) = print(0) - 第三层调用:print(0)
if判断自减前x=0,条件不成立,直接返回,无任何输出 - 回到第二层调用执行逗号右侧语句
此时x=1,计算1%26 + 'A' = 1 + 65 = 66,对应字符B,输出B,第二层调用执行完毕返回第一层 - 回到第一层调用执行逗号右侧语句
此时x=54,计算54%26 + 'A' = 2 + 65 = 67,对应字符C,输出C
最终两次输出拼接结果就是BC。
内容的提问来源于stack exchange,提问作者Light Aristocrat
相关产品推荐
相关产品推荐

