【问题标题】:C: allocate a pointerC:分配一个指针
【发布时间】:2016-02-17 18:16:48
【问题描述】:

所以我们有一个结构体,它实际上表示链表的一个节点。也是一个指向节点的指针。

typedef struct node{
    int value;
    struct node *next;
}node;

node* head=NULL;

如果我要使用 malloc 动态分配指针,

head=malloc(sizeof(node));

这意味着我正在创建一些内存空间,具有节点大小,并且 head 指向它。

我想知道这个head=malloc(sizeof(node*)); 之间的区别,正如你在sizeof 中看到的那样,它有node* 而不是node。现在我真的认为一直以来我都不知道 malloc 到底做了什么!

【问题讨论】:

  • malloc 会给你一个指向至少和你要求的大小一样大的内存的指针(尽管有时它会在失败时返回NULL)。您是否尝试过实际打印出 sizeof(node)sizeof(node *) 来看看您得到了什么?
  • 你不是“分配一个指针”,而是一个它指向类型的对象并将地址分配给指针。现在想想你必须将哪个尺寸传递给malloc

标签: c pointers malloc


【解决方案1】:
head=malloc(sizeof(node*));

将在内存中分配一个空间来保存指向节点类型对象的指针。

head=malloc(sizeof(node));

将为结构本身分配空间,并将该内存空间的地址返回给您,并将其保存在 head 变量中

有关更多信息,请查看有关 Malloc 的其他问题。 How do free and malloc work in C?

【讨论】:

  • 那么输入“head=malloc(sizeof(node*));”有什么意义?还是?
  • @Skemelio 如果你想分配一个指针,出于某种原因。你可以写node **head = malloc(sizeof(node*));
【解决方案2】:

sizeof(node) 是整个结构的字节大小,可以任意大。 sizeof(node*) 是指针变量的大小,无论结构有多大,它都是固定的(在大多数系统上它很小)。

【讨论】:

    【解决方案3】:
    head=malloc(sizeof(node*));
    

    不正确。对malloc 的调用分配了足够的内存来仅保存node*node* 必须指向 node 对象。这意味着您需要分配足够的内存来保存node 对象,而不是node*

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-19
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      相关资源
      最近更新 更多