Что делает sizeof?

Из чего основная функция sizeof (Я плохо знаком с C++). Например,

int k=7;
char t='Z';

Что делает sizeof (k) или sizeof (int) и sizeof (char) средний?

16
задан Peter Mortensen 28 September 2010 в 16:37
поделиться

3 ответа

sizeof(x) возвращает объем памяти (в байтах), который занимает переменная или тип x. Это не имеет никакого отношения к значению переменной.

Например, если у вас есть массив произвольного типа T, то расстояние между элементами этого массива в точности равно sizeof(T).

int a[10];
assert(&(a[0]) + sizeof(int) == &(a[1]));

При использовании на переменной, это эквивалентно использованию на типе этой переменной:

T x;
assert(sizeof(T) == sizeof(x));

Как правило, лучше использовать имя переменной, где это возможно, на случай, если тип изменится:

int x;
std::cout << "x uses " << sizeof(x) << " bytes." << std::endl
// If x is changed to a char, then the statement doesn't need to be changed.
// If we used sizeof(int) instead, we would need to change 2 lines of code
// instead of one.

При использовании на пользовательских типах, sizeof по-прежнему возвращает объем памяти, используемый экземплярами этого типа, но стоит отметить, что это не обязательно равно сумме его членов.

struct Foo { int a; char b; };

Хотя sizeof(int) + sizeof(char) обычно составляет 5, на многих машинах sizeof(Foo) может быть 8, потому что компилятору нужно вырезать структуру так, чтобы она лежала на границах 4 байт. Это не всегда так, и вполне возможно, что на вашей машине sizeof(Foo) будет 5, но вы не можете на это полагаться.

54
ответ дан 30 November 2019 в 15:11
поделиться

В дополнение к ответу Питера Александра: sizeof дает размер значения или типа в кратных величинах от размера char--- char определяется как наименьшая единица памяти, адресуемая (языком C или C++) для данной архитектуры (и, по крайней мере, в C++, размером не менее 8 бит в соответствии со стандартом). Это то, что обычно подразумевается под "байтами" (наименьшая адресуемая единица для данной архитектуры), но никогда не помешает уточнить, и иногда возникают вопросы об изменчивости sizeof (char), который, конечно, всегда 1.

9
ответ дан 30 November 2019 в 15:11
поделиться

sizeof () возвращает размер переданного ему аргумента. sizeof () cpp reference

6
ответ дан 30 November 2019 в 15:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: