打印一个指针包含在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设者。