2010-07-08 3 views
14

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

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

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

+0

Вам не хватает «вашего персонажа». – Konrad

+8

@ Тайлер Мак-Хенри Сроки очень мало для меня в 0.08 сек. – DumbCoder

+8

@ davit: если вы собираетесь изучать язык программирования, вам стоит попробовать прочитать приличную вступительную книгу на языке, чтобы получить основы, а не просто оставить ее в пробном, ошибка, догадки и бесконечные вопросы о SO. –

ответ

49

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 потому, что компилятор должен pad out структуру таким образом, что она лежит на 4 границах байтов. Это не всегда так, и вполне возможно, что на вашей машине sizeof(Foo) будет 5, но вы не можете зависеть от нее.

+0

int означает, что если переменная t задана t = 100, чем sizeof (t) = 1? –

+0

но это покажет мне 4 почему –

+0

'sizeof' не имеет ничего общего с * значением * переменной. Это связано с типом.Он говорит вам, что в вашей системе все переменные типа 'int' требуют 4 байта памяти. –

7

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

+0

Байт не обязательно является «наименьшим адресом для заданной архитектуры». На некоторых компьютерах с компакт-диском CDC наименьшее адресуемое устройство представляет собой 16-разрядное слово (адрес 0 - 16 бит, адрес 1 - 16-разрядный), и они относятся к двум половинам в виде байтов. –

+0

@James: Справа: моя точка зрения заключалась в том, что «байт» является неотъемлемо неоднозначным термином, и как бы вы его ни определяли, кто-то где-то будет использовать его по-разному. Интересно о CDC. –

+0

Большинство людей согласятся, что байт составляет 8 бит, и, хотя раньше была какая-то путаница, он стандартизован в настоящее время: IEC 80000-13. Напротив, наименьшая адресуемая единица в машине часто называется словом, и она зависит от машины. Есть 16-, 32-, 64-разрядные архитектуры, но даже в этих контекстах байт по-прежнему будет 8 бит. – Zane

Смежные вопросы