del*_*242 3 c printf string-formatting
请考虑以下代码:
#include <stdio.h>
int main() {
int i = 0;
printf("hello%n%d\n", &i, i);
}
Run Code Online (Sandbox Code Playgroud)
为什么打印hello0而不打印hello5?
调用函数时,函数参数将复制到被调用函数的范围内.由于iIS 0,将值0被复制到的范围printf,并用于在打印%d转换.
此外,该值&i将复制到函数的作用域中,并且该函数使用该值来填充该地址的变量,并使用到目前为止的输出字节数.因此,在函数调用返回后,您可以检查i以查找该值.
您使用相同的变量既为%d参数生成值又为参数生成地址这一事实%n纯属巧合.事实上,最后一个i论点实际上有点误导,因为这里的重要性并不i重要,只有它的价值.你可能还有一个文字0.(从技术上讲,表达式i经历了"左值转换",这只是一种说法,你不关心变量,只关注价值.)