Зачем писать `sizeof (char)`, если char равен 1 по умолчанию? - PullRequest
49 голосов
/ 30 августа 2011

Я занимался кодированием на C, и после прочтения кода на C я заметил, что есть фрагменты кода, такие как

char *foo = (char *)malloc(sizeof(char) * someDynamicAmount);

Поэтому я хочу спросить, как еще C-ish способ выделить память для charмассив?Использовать sizeof(char) и предположительно на будущее код против любых стандартных изменений или опустить его и использовать номер напрямую?

Ответы [ 12 ]

0 голосов
/ 30 августа 2011

Стандарт намеренно неопределен относительно размеров распространенных типов.[ Википедия ]

Маловероятно, что размер char не изменится, но размер short изменился ,Идиоматический способ:

type_t *foo = malloc(sizeof(type_t) * someDynamicAmount);

для любого типа (общего или сложного) type_t или

type_t *foo = malloc(sizeof(*foo) * someDynamicAmount);

, так что вы можете принять решение о внесении изменений в тип foo позже и толькоизмените его в одном месте.

0 голосов
/ 30 августа 2011

Стиль кодирования также может быть записан как: -

char *foo = (char *)malloc(1 * someDynamicAmount);

Но это сделано для того, чтобы динамически распределенная память могла быть увеличена в соответствии с отсутствием базового типа данных, который вы хотите. если вы хотите увеличить 100 символов, это увеличит 100 символов. Если нет необходимости, но если мы напишем 101 или 102, это потратит память. выполнение этого в соответствии с базовым типом данных не приведет к потере места в памяти

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