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)
这是什么存储空间地址,哪一部分是偏移量?
显然,您的a变量已使用初始化0。
%u 显示无符号整数,然后将内存地址作为参数传递%p 通常显示指针的值,因此如果为0,则显示为 (nil)%p同样,但是您现在传递的地址为a,以十六进制显示。%fp是%f(浮动格式)和文字p。我很确定这会导致未定义的行为,因为printf需要一个浮点数,并且您传递一个整数(指针是long / integer值)。我们从中学到什么?不要编写废话代码,也不要将参数传递给printf样式的函数,除非您的格式字符串完全需要这些参数。