使用C分配地址时的困惑

时间:2016-09-13 05:37:19

标签: c pointers

我正在尝试将一个名为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);
  }

3 个答案:

答案 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 *值。这就是演员阵容的原因。