Что делает sizeof? - PullRequest
       6

Что делает sizeof?

16 голосов
/ 08 июля 2010

Что является основной функцией sizeof (я новичок в C ++). Например

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

Что означают sizeof (k) или sizeof (int) и sizeof (char)?

Ответы [ 3 ]

53 голосов
/ 08 июля 2010

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, но вы не можете зависеть от этого.

9 голосов
/ 08 июля 2010

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

6 голосов
/ 08 июля 2010

sizeof () возвращает размер аргумента, переданного ему. sizeof () cpp ссылка

...