C-这将是什么输出?请也解释一下


#include<stdio.h>
int main(){
int a;
printf("%un ",&a); 
printf("%pn ",a); 
printf("%pn ",&a); 
printf("%fpn ",&a); 
return 0;
}

我尝试了此代码,但我无法理解输出

4193177020
 (nil)
 0x7ffff9eecdbc
 0.000000p

该组件在此中有什么段是什么部分?

显然您的a变量是用0初始化的。

  • %u显示一个无符号整数,然后将存储地址作为参数传递
  • %p通常显示指针的值,因此,在0的情况下,它显示为(nil)
  • %p也这样做,但是您现在通过a的地址,该地址显示在十六进制中。
  • %fp%f(浮点格式)和文字p。我很确定这会导致不确定的行为,因为printf期望浮动并通过整数(指针是长/整数值)。

我们从中学到什么?不要编写无义代码不要将参数传递给printf式函数,除非您有一个格式的字符串,该字符串完全期望这些参数

看来您正在阅读一些非常古老的书。段和偏移组合被用来解决16位应用中的内存,它们被称为"远指针",而不是仅包含偏移的"本地指针"(通常是从ds寄存器中获取的段)。

)。 )。

与32位或64位应用程序相关。这些应用程序可与一个单一的虚拟内存块一起使用,该记忆不再细分为段。操作系统将虚拟内存的部分映射到物理内存,这是应用程序不再需要担心的东西。所有指针都是该虚拟内存空间内部的偏移(分别为32位或64位应用程序) - 单个数字。

至于您的printf语句,唯一将指针实际上指向a并将其打印为指针的语句是printf("%pn ",&a)-其他答案指出的是其他答案。

相关内容

最新更新