2015-04-08 6 views
-1
#include <stdio.h> 

int main(){ 
printf("%d\t",sizeof(6.5)); 
printf("%d\t",sizeof(90000)); 
printf("%d\t",sizeof('a')); 

return 0; 
} 

Когда я компилирую свой код, выход будет: «842». Может кто-нибудь объяснить, почему я получаю этот выход?Как и выход моего кода 842?

+7

Какой выход вы ожидаете? –

+2

Примечание [sizeof возвращает size_t, поэтому вы должны использовать% zu] (http://stackoverflow.com/a/21128106/1708801). –

+1

Обратите внимание, что ваш код даже не компилируется, поскольку он заставляет меня думать, что это не ваш фактический код. Также я ожидал бы «8 4 1», если только ваш компилятор не поддерживает широкую поддержку символов. –

ответ

5

Прежде всего синтаксической ошибки в коде

printf("%d\t";sizeof('a')); 

изменить это на

printf("%zu\t",sizeof('a')); //note the change in format specifier also 
      ^
      | 
      see here 

Затем предполагается, что ваш кроссплатформенного является 32-разрядное

  • sizeof(6.5) == sizeof(double) == 8
  • sizeof(90000) == sizeof(int) == 4
  • sizeof('a') == sizeof(int) == 4

Чтобы уточнить, a представляет собой значение из 97, который по умолчанию int. так, sizeof('a') должен дать значение 4, а не 2 или 1.


Edit:

Для добавления, вы получите выход 8 4 2, если в 16-битной арке

  • sizeof(6.5) == sizeof(double) == 8
  • sizeof(90000) == sizeof(long) == 4
  • sizeof('a') == sizeof(int) == 2
+3

Размер 'int' определяется реализацией. Это может быть '2' на системе OP. –

+0

@MattMcNabb, но он не должен меняться, не так ли? Таким образом, это должно быть либо '822', либо' 844', не так ли, как '842', правильно? –

+0

@MattMcNabb Однако добавлена ​​заметка о зависимости платформы. Надеюсь, теперь все в порядке? –

-1

Если вы на 32 битного компилятора

printf("%d\t",sizeof(6.5)); 

6.5 является двойной, так sizeof(double) дает 8.

printf("%d\t",sizeof(90000)); 

90000 является Int (или длинный), поэтому sizeof(int) дает 4.

printf("%d\t";sizeof('a')); 
      ^
      you left a semicolon here, change it to a comma 

'a' преобразуется в целое, так sizeof(int) дает 4.

Так фактический выход

8  4  4 

ideone link

Но, если вы на 16 битного компилятора, вы получите

sizeof(6.5) = sizeof(double) = 8
sizeof(90000) = sizeof(long) = 4
sizeof('a') = sizeof(int) = 2

Так что это объяснит ваш выход.

+0

почему нет 8 4 4 ?? в конце концов, '' a'' == 97 == 'int' –

+0

Действительно, размер символа должен быть 1, ему любопытно, что у него отличный результат – yonutix

+0

@CosminMihai nope. это не 'char'. –