打印一个指针包含在C中的地址

我想做一些看起来相当简单的事情。 我得到的结果,但问题是,我没有办法知道如果结果是正确的。

我在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; 

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

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

 printf("%p",emp1) 

解除引用一次并打印第二个地址:

 printf("%p",*emp1) 

你可以随时用debugger进行validation,如果你在linux上使用ddd和display memory,或者只是简单的gdb ,你会看到内存地址,所以你可以比较指针中的值。

我相信这是最正确的。

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

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

由于您已经解决了基本的指针地址显示问题,因此您将如何检查双指针的地址:

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

你可以通过下面的方式访问双指针的地址:

 printf("a points at this memory location: %p", a); printf("which points at this other memory location: %p", *a); 
 char c = 'A'; printf("ptr: %p,\t value: %c,\t and also address: %zu",&c, c,&c); 

结果:

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

我一直处于这个位置,尤其是在新硬件方面。 我build议你写一个自己的一个小的hex转储程序。 您将能够看到数据和地址,并一起显示。 这是一个很好的练习和一个自信的build设者。