Оператор sizeof () в C - PullRequest
       40

Оператор sizeof () в C

5 голосов
/ 26 июля 2010

Рассмотрим программу

main()  
{  
 printf("%d %d %d",sizeof('3'),sizeof("3"),sizeof(3));  
}

Вывод компилятора gcc :

4 2 4

Почему это так?

Ответы [ 4 ]

13 голосов
/ 26 июля 2010

Если вы работаете в 32-битной системе:

размер символьного литерала '3' равен 4, потому что символьные литералы являются целыми числами в языке C (но не в C ++).

sizeof "3" равно 2, потому что это литерал массива длиной 2 (цифра 3 плюс терминатор NULL).

размер литерала 3 равен 4, потому что это int.

12 голосов
/ 26 июля 2010

Следует иметь в виду несколько моментов:

  1. sizeof - это не функция, это оператор.Возвращает размер типа в единицах sizeof char.Другими словами, sizeof char всегда равно 1.
  2. '3' - это int
  3. "3" - это char[2], символ 3, затем нулевой терминатор.
  4. 3 - это int

Этим легко объяснить различия:

  1. и int требуется 4 char с места для его хранения
  2. char[2] естественно требуется только 2 char с
3 голосов
/ 26 июля 2010

Цитировать K & R,

Каждый компилятор может свободно выбирать соответствующие размеры для его собственного аппаратное обеспечение, подчиняется только ограничение, что шорты и целые минимум 16 бит, длинные - минимум 32 бита, а короткое не более int, который не длиннее long.

0 голосов
/ 26 июля 2010

sizeof () Вывод зависит от используемого компилятора

...