Ani*_*nna -2 c c++ memory pointers unsigned-integer
我正在学习C,最近我的课程指针和内存地址.老师告诉我们,内存位置基本上是无符号数字,因此我们可以使用以下代码显示它们:
int a;
printf("%u", &a);
Run Code Online (Sandbox Code Playgroud)
要么
int a, *p=&a;
printf("%u", p);
Run Code Online (Sandbox Code Playgroud)
事实上,这是有效的,但我也在一些论坛中读到,应该使用%p或%x来打印地址.所以,它们必须是十六进制数...我上面看到的整数实际上是十六进制数转换为十进制吗?实际上它们的基本形式是什么地址 - 十六进制或整数或简单的二进制数.
请帮帮我.
基本形式的地址只是值.十六进制,二进制或八进制是数字的表示.例如42,0x2a,,,,和都是不同的表示相同的值.2a1605252810101021042
就你应该用作格式字符串而言,%p是正确的.无法保证无符号整数与指针具有相同的位数,因此您可能会丢失信息.
实际上,提供和参数printf与相应的格式说明符不匹配实际上是未定义的行为.
使用%u或%x变体可能适用于大多数系统,其中指针和无符号整数具有兼容的大小,但真正的可移植代码不依赖于此.例如,一个实现可以自由地拥有一个16位无符号整数(以满足最小范围要求ISO C11 Appendix E)和一个1024位指针类型(我得给我一台这样的机器).