c - 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 之前发生的吗?
解决方案
仅在您想知道其大小的sizeof
类型时才使用括号。如果你有一个表达式,比如*ptr
,那么这样写就足够了:
struct Node *ptr = malloc(sizeof *ptr); // <- no parenthesis
该表达式*ptr
取消引用指针,使其变为 a struct Node
,这sizeof
就是返回大小的原因。
sizeof
expression
- 返回表达式类型的对象表示的大小(以字节为单位)。没有隐式转换应用于表达式。
如果你这样做,你得到的大小是一样的:
struct Node *ptr = malloc(sizeof(struct Node)); // <- parenthesis needed
但为了清楚起见,第一种选择通常更可取。