在C中打印值的地址或指针

时间:2009-06-28 22:48:50

标签: c pointers memory-address

我想做一些看似相当简单的事情。我得到了结果,但问题是,我无法知道结果是否正确。

我在C工作,我有两个指针;我想打印指针的内容。我不想取消引用指针来获取指向的值,我只想要指针存储的地址。

我编写了以下代码,我需要知道的是,如果它是正确的,如果没有,我该如何纠正它。

/* item one is a parameter and it comes in as: const void* item1   */
const Emp* emp1 = (const Emp*) item1; 

printf("\n comp1-> emp1 = %p; item1 = %p \n", emp1, item1 );

虽然我发布这个(以及重要的是它是正确的)是我最终需要这样做一个指向指针的指针。那就是:

const Emp** emp1 = (const Emp**) item1; 

6 个答案:

答案 0 :(得分:38)

在指向指针的地址中打印地址:

printf("%p",emp1)

取消引用一次并打印第二个地址:

printf("%p",*emp1)

您始终可以使用调试器进行验证,如果您使用的是ddd并显示内存,或只是gdb,您将看到内存地址,以便与指针中的值进行比较

答案 1 :(得分:28)

你拥有的是正确的。当然,你会看到emp1和item1具有相同的指针值。

答案 2 :(得分:14)

我相信这是最正确的。

printf("%p", (void *)emp1);
printf("%p", (void *)*emp1);

printf()是一个可变函数,必须传递正确类型的参数。标准说%p需要void *

答案 3 :(得分:9)

既然你似乎已经解决了基本的指针地址显示,那么你将如何检查双指针的地址:

char **a;
char *b;
char c = 'H';

b = &c;
a = &b;

您可以通过执行以下操作来访问双指针a的地址:

printf("a points at this memory location: %p", a);
printf("which points at this other memory location: %p", *a);

答案 4 :(得分:4)

char c = 'A';
printf("ptr: %p,\t value: %c,\t and also address: %zu",&c, c,&c);

结果:

  

ptr:0xbfb4027f,值:A,地址:3216245375

答案 5 :(得分:0)

我一直在这个位置,尤其是新硬件。我建议你自己编写一个小的十六进制转储程序。您将能够一起显示数据及其所在的地址。这是一个很好的做法和一个信心建设者。