Что 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 в стеке?

Предположительно, это значение будет использоваться программой ниже...? Вы говорите нам.

Другие вопросы по тегам