C 这个项目的产出是什么?请解释一下

C 这个项目的产出是什么?请解释一下,c,memory-management,compiler-construction,offset,memory-segmentation,C,Memory Management,Compiler Construction,Offset,Memory Segmentation,这里的符号内存地址是什么,偏移量是什么?显然,a变量是用0初始化的 %u显示一个无符号整数,并将内存地址作为参数传递 %p通常显示指针的值,因此在0的情况下,它显示为nil %p执行相同的操作,但是现在您要传递a的地址,该地址以十六进制显示。 %fp是%f浮点格式和文本p。我很确定这会导致未定义的行为,因为printf需要一个浮点,而您传递的是一个整数指针是长/整数值。 我们从中学到了什么?不要编写无意义的代码,也不要将参数传递给printf风格的函数,除非您有一个格式字符串正好需要这些参数。您

这里的符号内存地址是什么,偏移量是什么?

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

%u显示一个无符号整数,并将内存地址作为参数传递 %p通常显示指针的值,因此在0的情况下,它显示为nil %p执行相同的操作,但是现在您要传递a的地址,该地址以十六进制显示。 %fp是%f浮点格式和文本p。我很确定这会导致未定义的行为,因为printf需要一个浮点,而您传递的是一个整数指针是长/整数值。
我们从中学到了什么?不要编写无意义的代码,也不要将参数传递给printf风格的函数,除非您有一个格式字符串正好需要这些参数。

您似乎正在阅读一些非常古老的书籍。段和偏移组合用于16位应用程序中的内存寻址,它们被称为远指针,而仅包含偏移段的本地指针通常从这些应用程序的ds寄存器中获取

这些都与32位或64位应用程序无关。这些应用程序使用不再细分为段的单个虚拟内存块。操作系统负责将部分虚拟内存映射到物理内存,这是应用程序不再需要担心的事情。对于虚拟内存空间内的32位或64位应用程序,所有指针都只是一个偏移量32位或64位-一个数字


至于printf语句,实际将指针指向a并将其作为指针打印的唯一语句是printf%p\n和&a-其他语句无效,正如另一个答案所指出的那样。

这些printf语句中只有一个是有效的;你想在这里实现什么?首先学习。我不能理解其中的三个,只有一个是有效的。不,这个程序没有任何意义。仅供参考,我很确定这是基于你发布的大量低质量和被严重否决的问题…@意思很重要:同意,尽管缺乏缩进是这里最小的问题;向上投票,但我要加上“用-Wall编译,这样你至少会被警告你的胡说八道”。
#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;
}
4193177020
 (nil)
 0x7ffff9eecdbc
 0.000000p