gpt4 book ai didi

c - 为什么在 malloc 中使用 sizeof(*pointer) 更安全

转载 作者:太空狗 更新时间:2023-10-29 16:20:02 24 4
gpt4 key购买 nike

给定

struct node
{
int a;
struct node * next;
};

分配一个新的结构,

struct node *p = malloc(sizeof(*p));

更安全
struct node *p = malloc(sizeof(struct node));

为什么?我以为它们是一样的。

最佳答案

它更安全,因为您不必两次提及类型名称,也不必为类型的“取消引用”版本构建正确的拼写。例如,您不必在

int *****p = malloc(100 * sizeof *p);

将其与基于类型的 sizeof 进行比较

int *****p = malloc(100 * sizeof(int ****));

您必须确保在 sizeof 下使用了正确数量的 *

为了切换到另一种类型,您只需更改一个地方(p 的声明)而不是两个。并且习惯于转换malloc结果的人必须改变三个地方。

更一般地说,坚持以下准则很有意义:类型名称属于声明而不是其他任何地方。实际语句应该是类型无关的。他们应尽可能避免提及任何类型名称或使用任何其他特定于类型的功能。

后者的意思是:避免不必要的转换。避免不必要的特定于类型的常量语法(如 0.00L,其中普通的 0 就足够了)。避免在 sizeof 下提及类型名称。等等。

关于c - 为什么在 malloc 中使用 sizeof(*pointer) 更安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17258647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com