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

use*_*021 -12 c compiler-construction memory-management offset memory-segmentation

#include<stdio.h>
int main(){
int a;
printf("%u\n ",&a); 
printf("%p\n ",a); 
printf("%p\n ",&a); 
printf("%fp\n ",&a); 
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过此代码,但无法理解输出

4193177020
 (nil)
 0x7ffff9eecdbc
 0.000000p
Run Code Online (Sandbox Code Playgroud)

这是什么存储空间地址,哪一部分是偏移量?

Thi*_*ter 5

显然,您的a变量已使用初始化0

  • %u 显示无符号整数,然后将内存地址作为参数传递
  • %p 通常显示指针的值,因此如果为0,则显示为 (nil)
  • %p同样,但是您现在传递的地址为a,以十六进制显示。
  • %fp%f(浮动格式)和文字p。我很确定这会导致未定义的行为,因为printf需要一个浮点数,并且您传递一个整数(指针是long / integer值)。

我们从中学到什么?不要编写废话代码也不要将参数传递给printf样式的函数,除非您的格式字符串完全需要这些参数