我正在尝试将一个名为node的结构的地址分配给另一个名为tmp的结构,该名称为tmp,它具有相同的类型 - Node。但是,tmp的地址始终小于节点的地址。这是为什么?谢谢!
#include <stdio.h>
#include <stdlib.h>
typedef struct _node
{
int data;
struct _node *next;
}Node;
int main()
{
Node *node = (Node*)malloc(sizeof(Node));
Node *tmp;
tmp = node;
printf("%d\n",&node);
printf("%d\n",&tmp);
}
答案 0 :(得分:1)
我猜你期望两行的输出相同。
为此,您必须打印指针的值,而不是指针的地址。
在
tmp = node;
tmp
的值与node
的值相同,但两个变量的地址总是不同。
我怀疑你打算使用:
printf("%p\n", node); // Use %p for pointers, not %d
printf("%p\n", tmp);
答案 1 :(得分:0)
可能的指针是平台上的8个字节。因此,由于您一个接一个地分配了一个,它们相隔8个字节。
答案 2 :(得分:0)
您对变量(指针类型)的值与其地址之间的区别感到困惑。您可以通过赋值运算符更改变量的值:
tmp = node;
但变量的地址是其定义特征中最重要的。你无法改变它。
您正在打印指针的地址(有点 - 格式字符串中的字段描述符是错误的)。要打印值,您需要这样:
printf("%p\n", (void *) node);
printf("%p\n", (void *) tmp);
关键的区别当然是上面没有使用address-of运算符(&
)。此外,%p
字段描述符是您打印指针值所需的,但它专门用于void *
值。这就是演员阵容的原因。