malloc 应该指定指针大小还是内存大小?

asd*_*sds 5 c linux networking

我正在阅读Beej\xe2\x80\x99s 网络编程指南,在第 45 页上编写了以下代码;

\n\n
struct pollfd *pfds = malloc(sizeof *pfds * fd_size);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想知道是否应该

\n\n
struct pollfd *pfds = malloc(sizeof(struct pollfd) * fd_size);\n
Run Code Online (Sandbox Code Playgroud)\n\n

由于malloc返回一个指向指定大小的内存块的指针。

\n\n

由于 *pfds 是一个指针,它的大小将为 4 或 8 字节,所以我无法理解为什么在创建数组时要考虑它的大小。

\n

Car*_*rum 4

sizeof *pfds是结构体的大小,而不是指针的大小。你的两个例子都是等价的。我更喜欢第一种形式,因为它更容易维护 - 如果结构的类型发生变化,您只需在一个位置修复它。

sizeof pfds将是指针的大小。

  • @RobertoCaboni,FWIW 我的感觉完全相反。`sizeof` 是一个运算符。多余的括号让我很难过。不像“return(x);”让我感觉那么糟糕,但仍然很难过。 (2认同)