gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:12:46 25 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/31282670/

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