作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
考虑以下代码:
#include <stdio.h>
int main() {
int i = 0;
printf("hello%n%d\n", &i, i);
}
为什么打印hello0
而不是hello5
?
最佳答案
当您调用一个函数时,函数参数被复制到被调用函数的范围内。由于 i
是 0
,值 0
被复制到 printf
的范围内,并用于在 中打印code>%d
转换。
此外,值 &i
被复制到函数的作用域中,函数使用该值将到目前为止的输出字节数填充到该地址的变量中。因此,在您的函数调用返回后,您可以检查 i
以找到该值。
您使用同一个变量为 %d
参数生成值并为 %n
参数生成地址这一事实纯属巧合。事实上,最后一个 i
参数确实有点误导,因为这里重要的不是 i
的身份,而是它的 value .您还不如在那里放一个文字 0
。 (从技术上讲,表达式 i
经历了“左值转换”,这只是一种奇特的说法,表示您不关心变量,只关心值。)
关于c - printf() : When is %n written?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47225294/
我是一名优秀的程序员,十分优秀!