在我看来,struct new_element *element = malloc(sizeof(*element))
创建了一个名为element的结构体,而我原以为它只是创建了一个指向该结构体的指针。下面的代码证明了我的错误:
struct new_element
{
int i;
struct new_element *next;
};
int main(void)
{
struct new_element *element = malloc(sizeof(*element));
element->i = 5;
element->next = NULL;
printf("i = %d, next = %p\n", element->i, element->next);
}
输出:
i = 5, next = (nil);
element->i
的值为5,element->next
的值为NULL
。这难道不意味着element
指向了一个结构体,也就是说确实创建了一个结构体吗?我之前认为malloc
只会给指针分配所需的内存大小。
malloc
以及其他相关知识存在很大误解。我强烈建议你从好的书籍中学习C语言,而不是通过在线教程或者晦涩的YouTube视频。 - too honest for this sitemalloc()
返回一个指向你指定大小的可用内存的指针。 - user2371524sizeof(element)
给出指针变量所需的空间(与您使用的结构无关),而sizeof(*element)
则给出所需的结构大小。 - GAURANG VYASsizeof(struct new_element)
和sizeof(*element)
将具有相同的值,许多人更喜欢后者的形式,因为它更明确地表示“由element
指向的对象的大小”。 - Ian Abbott*
有不止一种含义。实际上,它有三种含义。根据上下文,它可以是类型的一部分,可以是指针解引用运算符,也可以是乘法运算符。(我在这里没有计算它在注释、字符常量和字符串字面值中的其他用途。) - Ian Abbott