一隻太平洋睡鯊 发表于 2022-5-27 09:29:39

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:36:59

本帖最后由 jackz007 于 2022-5-27 09:41 编辑

      为什么要去掉前导 0?那是有意义的,代表完整的内存地址,可以防止出错。
      这2句
      printf("%-p \n", &x);
      printf("%-p \n", y);
      改成这样
      printf("%-x \n", &x);
      printf("%-x \n", y);

一隻太平洋睡鯊 发表于 2022-5-27 09:39:39

jackz007 发表于 2022-5-27 09:36
为什么要去掉前导 0?那是有意义的,代表完整的内存地址,可以防止出错。

啊,是這樣嗎
因為教材裡面前面沒有0
每台電腦都是有16位嗎?

jackz007 发表于 2022-5-27 09:43:37

一隻太平洋睡鯊 发表于 2022-5-27 09:39
啊,是這樣嗎
因為教材裡面前面沒有0
每台電腦都是有16位嗎?

      要去掉前导 0 ,把 printf() 里指针的格式描述符 “%-p” 换成 "%-x"试试看呢。

一隻太平洋睡鯊 发表于 2022-5-27 09:57:58

jackz007 发表于 2022-5-27 09:43
要去掉前导 0 ,把 printf() 里指针的格式描述符 “%-p” 换成 "%-x"试试看呢。

所以p是顯示完整的路徑,總共有16位(每台電腦都一樣嗎?
用16進制的輸出符x就能只輸出含有值的部分(前面0就不會顯示)

jackz007 发表于 2022-5-27 10:38:31

本帖最后由 jackz007 于 2022-5-27 10:40 编辑

       "%p" 是专门用于打印指针值的格式描述符,"%-p" 的意思是,在域宽范围内,按照右对齐的格式进行输出。

       至于指针有多少位(长度),这个问题完全取决于你所使用的 C / C++ 编译器的类型,如果你使用 32 位的编译器,那么,"%-p" 输出的指针长度就会是 4 个字节(8 个字符),如果编译器是 64 位,指针长度就会是 8 个字节(16 个字符),就你的程序输出来看,你所使用的编译器就应该是 64 位的。

一隻太平洋睡鯊 发表于 2022-5-27 10:42:13

jackz007 发表于 2022-5-27 10:38
"%p" 是专门用于打印指针值的格式描述符,"%-p" 的意思是,在域宽范围内,按照右对齐的格式进行输出 ...

原來如此!!
不過"-"我記得是靠左?
其實是我自己加的(我貼的時候沒注意到貼了加"-"的XD
我是想試試看靠左能不能把0消掉
這麼天真的方法果然不可能啊23333
页: [1]
查看完整版本: 16進制指標變數打印問題