Что sizeof(*v) означает в C?
У меня есть кусок кода, как это:
struct mystruct *v;
size_t sz;
sz = sizeof(*v);
Какие sz
как ожидается?
Какая разница с sizeof(struct mystruct)
?
Какой смысл иметь sz
в стеке (вместо, например, #define
)?
3 ответа
sizeof
является оператором времени компиляции, компилятор заменяет его соответствующим номером. поэтому во время выполнения там будет число - без указателя.
sizeof(*t)
дает вам размер T
где t
является T*
, так что давайте предположим, char* c;
sizeof(c)
даст размер указателя, в то время как sizeof(*c)
даст размер символа, который составляет 1 байт.
Что ожидается от sz, если v неинициализировано?
sizeof
Оператор не должен ничего делать с тем, какое значение операнд содержит. Что имеет значение, так это тип.
Вот sizeof(*v)
даст размер struct mystruct
на что это указывает.
Каким должен быть sz?
Размер типа структуры в байтах, включая любые байты заполнения.
В чем разница с sizeof(структура mystruct)?
Нет, это просто разные стили кодирования.
Какой смысл иметь sz в стеке?
Предположительно, это значение будет использоваться программой ниже...? Вы говорите нам.