C 如何在printf中查看结构的地址
我有一个返回地址的函数,如下所示C 如何在printf中查看结构的地址,c,pointers,struct,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-&
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 {
int data;
struct node *next;
};
如何在printf(“”)中看到存储在temp中的地址
更新如果我检查gdb中的地址,地址将采用十六进制数字格式,即。
0x602010,其中,
printf(“%p”,temp)”中的同一地址的编号与我在gdb print命令中看到的不同。使用指针地址格式说明符%p
:
printf("Address: %p\n", (void *)temp);
编辑:
不要这样做!它打印指针的地址,而不是您想要的强>
我在让它工作时遇到了各种各样的麻烦,但编译器(我使用简单的“cc”unix命令行)并没有抱怨,似乎给出了适当的结果:
struct node temp;
// ... whatever ...
printf ("the address is %p", &temp);
[我没有删除,而是将此作为不应执行的操作的示例。-smb]在此处输入代码
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
}
#包括
构造任意位置
{
双a;
int b;
字符c;
浮动d;
}g;
int main()
{
printf(“%p\n%p\n%p\n%p\n”、&g.a、&g.b、&g.c、&g.d);
返回0
}
现在我们可以得到输出:
g.a.的地址,反之亦然
我们可以这样打印结构变量地址
通过打印每个成员的地址,我们可以看到填充在结构中是如何发生的
谢谢大家
如有任何错误和建议,请发表评论 +1:对于过于热心(学究式的正确)的编译器,将指针投射到void*
:printf(“%p”,(void*)temp)
为什么不直接打印东西的地址,比如printf(“0x%08X”,&temp)
?@aroth:您不能保证无符号
和结构节点**
具有相同的表示形式:您的代码段在64位计算机上严重失败instance@pmg我想你的第一个注释重新转换为<>代码>空> >代码>只适用于C++吗?在C语言中,您可以将任何指针类型传递给一个函数,该函数需要一个void*
,no?@Paul:printf
是一个接受可变数量参数的函数。第一次之后的参数“无原型”。编译器无法强制执行正确类型的值,程序员必须手动执行。我不知道C++。这是错误的(参见另一个讨论的答案),同样,这个问题清楚地要求看<代码> TEMP而不是<代码>和TEMP @ M.M,是的,进一步的测试表明你是对的。这个答案打印指针的地址,而不是其中的值。