Я считаю, когда вы звоните sizeof
на struct
типа C рекурсивно вызывает SizeOf на полях struct
. Итак, struct st *x = malloc(sizeof(struct st));
действительно работает, если struct st
имеет фиксированный размер. Это важно только в том случае, если в вашей структуре есть что-то вроде строки с переменным размером, и вы НЕ хотите давать ей максимальную длину каждый раз.
В общем,
struct st *x = malloc(sizeof(struct st));
работы. Иногда вы сталкиваетесь с структурами с переменным размером или абстрактными структурами (think: abstract class from Java), и компилятор скажет вам, что он не может определить размер struct st. В этих случаях вам придется вычислять размер вручную и вызывать malloc с номером, или вы найдете функцию, которая возвращает полностью реализованную и malloc'd версию структуры, которую вы хотите.
, когда вы сомневаетесь, попробуйте это! –
@Blackbinary: Почти там. Правильный синтаксис - 'malloc (sizeof (struct st))'. Конечно, 'sizeof * x', указанный ниже, является предпочтительным. – kennytm
+1 от меня ... хороший вопрос и полезен для новичка! – t0mm13b