мальло c должен быть указан размер указателя или размер памяти? - PullRequest
4 голосов
/ 26 марта 2020

Я просматривал Руководство Биджа по сетевому программированию , и на странице 45 был написан следующий фрагмент кода:

struct pollfd *pfds = malloc(sizeof *pfds * fd_size);

Мне было интересно, должно ли это быть

struct pollfd *pfds = malloc(sizeof(struct pollfd) * fd_size);

Поскольку mallo c возвращает указатель на блок памяти указанного размера.

Поскольку * pfds является указателем, его размер будет равен 4 или 8 байтов, поэтому Я не могу понять, почему его размер учитывается при создании массива.

1 Ответ

4 голосов
/ 26 марта 2020

sizeof *pfds - это размер структуры, а не размер указателя. Оба ваших примера эквивалентны. Я предпочитаю первую форму, так как ее легче поддерживать - если тип структуры меняется, вам нужно исправить ее только в одном месте.

sizeof pfds будет размером указателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...