我想要做的事,这似乎相当简单。我得到的结果,但问题是,我没有办法知道,如果结果是正确的。

我用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和物品1具有相同的指针值。

其他提示

要在指针打印地址指针:

printf("%p",emp1)

一旦取消引用和打印第二地址:

printf("%p",*emp1)

您可以随时与调试验证,如果你是在Linux上使用ddd和显示内存,或只是简单的gdb,你会看到内存地址,这样你就可以在你的指针与值进行比较。

我相信这将是最正确的。

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

printf()是一个可变参数函数和必须通过合适的类型的参数。标准说%p需要void *

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

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);
char c = 'A';
printf("ptr: %p,\t value: %c,\t and also address: %zu",&c, c,&c);

结果:

  

PTR:0xbfb4027f,值:A,并且还涉及:3216245375

我已经在这个位置上,尤其是用新的硬件。我建议你写你自己的小十六进制转储程序。你将能够看到的数据,他们在地址一起显示。这是很好的做法和信心建设者。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top