Разница между sizeof (struct structname) и sizeof (object) в C - PullRequest
3 голосов
/ 23 сентября 2011

Существуют ли сценарии, в которых может быть разница между sizeof(struct structure_name) и sizeof(object), где object имеет тип struct structure_name в C?

Ответы [ 2 ]

7 голосов
/ 23 сентября 2011

Нет, нет никакой разницы между sizeof(type) и sizeof(o), где объявленный тип o равен type.

Могут быть различия, если объявленный тип объекта не является действительно представительным для объекта. Например

char arrayValue[100];
sizeof(arrayValue);  // 100 on most systems
char* pointerValue = arrayValue;
sizeof(pointerValue);  // 4 on most 32 bit systems

Эта разница возникает из-за того, что sizeof является конструкцией времени компиляции в C. Следовательно, нет анализа времени выполнения, и компилятор вместо этого смотрит на статически объявленные типы.

3 голосов
/ 23 сентября 2011

Нет; sizeof(type) и sizeof(object-of-type) всегда дают один и тот же результат.

Ну, есть предостережение, что с VLA (массив переменной длины), sizeof() может быть операцией во время выполнения, но в противном случае они исправлены. И вы можете привести случай, когда даже с VLA результат sizeof(variably-qualified-type) и sizeof(object-of-same-variably-qualified-type) даст одинаковый результат, поэтому VLA на самом деле не исключение.

...