16進制指標變數打印問題
#include <stdio.h>int main()
{
int x = 200;
int *y;
y = &x;
printf("%-p \n", &x);
printf("%-p \n", y);
printf("%d \n", *y);
return 0;
}
打印
000000000062FE14
000000000062FE14
200
為什麼前面會有0?(因為是16進制? 雖然是剛好16位...
前面的0有什麼方法可以刪掉嗎? 本帖最后由 jackz007 于 2022-5-27 09:41 编辑
为什么要去掉前导 0?那是有意义的,代表完整的内存地址,可以防止出错。
这2句
printf("%-p \n", &x);
printf("%-p \n", y);
改成这样
printf("%-x \n", &x);
printf("%-x \n", y); jackz007 发表于 2022-5-27 09:36
为什么要去掉前导 0?那是有意义的,代表完整的内存地址,可以防止出错。
啊,是這樣嗎
因為教材裡面前面沒有0
每台電腦都是有16位嗎?
一隻太平洋睡鯊 发表于 2022-5-27 09:39
啊,是這樣嗎
因為教材裡面前面沒有0
每台電腦都是有16位嗎?
要去掉前导 0 ,把 printf() 里指针的格式描述符 “%-p” 换成 "%-x"试试看呢。 jackz007 发表于 2022-5-27 09:43
要去掉前导 0 ,把 printf() 里指针的格式描述符 “%-p” 换成 "%-x"试试看呢。
所以p是顯示完整的路徑,總共有16位(每台電腦都一樣嗎?
用16進制的輸出符x就能只輸出含有值的部分(前面0就不會顯示) 本帖最后由 jackz007 于 2022-5-27 10:40 编辑
"%p" 是专门用于打印指针值的格式描述符,"%-p" 的意思是,在域宽范围内,按照右对齐的格式进行输出。
至于指针有多少位(长度),这个问题完全取决于你所使用的 C / C++ 编译器的类型,如果你使用 32 位的编译器,那么,"%-p" 输出的指针长度就会是 4 个字节(8 个字符),如果编译器是 64 位,指针长度就会是 8 个字节(16 个字符),就你的程序输出来看,你所使用的编译器就应该是 64 位的。 jackz007 发表于 2022-5-27 10:38
"%p" 是专门用于打印指针值的格式描述符,"%-p" 的意思是,在域宽范围内,按照右对齐的格式进行输出 ...
原來如此!!
不過"-"我記得是靠左?
其實是我自己加的(我貼的時候沒注意到貼了加"-"的XD
我是想試試看靠左能不能把0消掉
這麼天真的方法果然不可能啊23333
页:
[1]