gpt4 book ai didi

c - printf() : When is %n written?

转载 作者:太空狗 更新时间:2023-10-29 16:05:37 27 4
gpt4 key购买 nike

考虑以下代码:

#include <stdio.h>

int main() {
int i = 0;
printf("hello%n%d\n", &i, i);
}

为什么打印hello0而不是hello5

最佳答案

当您调用一个函数时,函数参数被复制到被调用函数的范围内。由于 i0,值 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com