我有一个返回地址的函数,如下所示
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打印命令中看到的数字不同。
答案 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评论。