如何在printf中查看结构的地址

时间:2011-06-20 10:09:36

标签: c pointers struct

我有一个返回地址的函数,如下所示

struct node *create_node(int data)
{
        struct node *temp;
        temp = (struct node *)malloc(sizeof(struct node));
        temp->data=data;
        temp->next=NULL;
        printf("create node temp->data=%d\n",temp->data);
        return temp;
}

其中struct node是

struct node {
        int data;
        struct node *next;
};

如何在printf(“”)中查看存储在temp?

中的地址

更新
如果我检查gdb中的地址,则地址是十六进制数字格式,即 0x602010,其中printf("%p",temp)中的相同地址的数字与我在gdb打印命令中看到的数字不同。

3 个答案:

答案 0 :(得分:27)

使用指针地址格式说明符%p

printf("Address: %p\n", (void *)temp);

答案 1 :(得分:2)

编辑: 请勿这样做!它会打印指针的地址,而不是您想要的!

我很难解决这个问题,但是编译器(我使用简单的“ cc” unix命令行)没有抱怨,并且似乎给出了适当的结果:

struct node temp;
// ... whatever ...
printf ("the address is %p", &temp);

[我没有删除而不是删除它作为不执行操作的示例。 -smb]

答案 2 :(得分:0)

enter code here

#include<stdio.h>
struct anywhere
{ 
double a;
int b;
char c;
float d;
}g;
int main()
{
printf("%p\n%p\n%p\n%p\n",&g.a,&g.b,&g.c,&g.d);
return 0
}        

现在我们可以得到输出: g.a反之亦然

我们可以这样打印结构变量地址 以及通过打印每个成员的地址可以看到结构中填充的情况。

谢谢大家 任何错误和建议请ping评论。