首页 > 解决方案 > struct Node *ptr = malloc(sizeof(*ptr)) 是如何工作的?

问题描述

我是 C 初学者,在尝试实现链表时遇到了这段代码。

    struct Node *ptr = malloc(sizeof(*ptr));

Node 结构如下所示:

    struct Node {
        int data;
        struct Node *next;
    };

我试图理解第一行。好像malloc(sizeof(*ptr))已经知道里面的内容了ptr。左侧到底发生了什么,是在调用 malloc 之前发生的吗?

标签: cpointersmallocsizeof

解决方案


仅在您想知道其大小的sizeof类型时才使用括号。如果你有一个表达式,比如*ptr,那么这样写就足够了:

struct Node *ptr = malloc(sizeof *ptr);         // <- no parenthesis

该表达式*ptr取消引用指针,使其变为 a struct Node,这sizeof就是返回大小的原因。

sizeofexpression- 返回表达式类型的对象表示的大小(以字节为单位)。没有隐式转换应用于表达式。

如果你这样做,你得到的大小是一样的:

struct Node *ptr = malloc(sizeof(struct Node)); // <- parenthesis needed

但为了清楚起见,第一种选择通常更可取。


推荐阅读