如何在C程序中打印指针的地址值?

2023-12-02

我正在尝试学习如何在 C 程序中使用指针;我的例子如下:

   #include <stdio.h>
   #include <stdlib.h>
   
   int main(int argc, char *argv[]) {
        int * tab = (int*)malloc(sizeof(int)*5);
        int a = 10;
        int *p;
        p  = &a;
        printf("the address of a is %d \n",&a);    
        printf("the address of a using the pointer is %p \n",p);    
        printf("the address of tab is %d \n",tab);    
    }

我正在尝试打印地址a,里面的地址值p其中第一个字节tab begins.

使用时我可以获得十六进制值"%p",但我愿意使用地址的十进制值。

Edit :对此Video image,有人用过"%d"打印指针地址的十进制值,这让我很困惑。


要打印一个decimal对象指针的版本,首先将指针转换为整数。最好使用可选类型uintptr_t.

以下类型(uintptr_t) 指定一个无符号整数类型,具有任何指向 void 的有效指针都可以转换为该类型的属性 (uintptr_t) ... C11dr §7.20.1.4 1

#include <inttypes.h>
uintptr_t d = (uintptr_t)(void *) &a;

然后打印它。
一些信息PRIuPTR

printf("%" PRIuPTR "\n", d);

对于 C99 之前的代码,请考虑直接转换为unsigned long. @Barmar


OP后来发表评论

“...我将尝试操作选项卡变量,并且我将测试选项卡中的每个单元格是否都是 4 字节,因此我可能会执行选项卡+8 字节来获取特定单元格的值,这是一个简单的例如,使用小数对我来说会很容易。”

这是一种有问题的方法,因为指针的十进制化可能无法提供预期的连续数值模型。这篇文章可能对学习有好处,但是随着OP在另一篇文章中提供更多细节,甚至可以为更高级别的问题提供更好的想法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在C程序中打印指针的地址值? 的相关文章

随机推荐