2013-06-04 6 views
0

Постановка задачи: -SizeOf на выходе программы гр

Что бы выход для следующей программы?

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

Я работаю с 32-битным gcc-компилятором. И печатает вывод как-

4, 2, 4 

Я смущен, почему он печатает 4 для sizeof ('3'). 3 в одиночных кавычках, так что это будет символ прав? Тогда он не должен распечатывать 4? Я прав?

+1

-1. В этой строке 'printf' есть только две'% d' и никакие запятые, поэтому это не выход. Пожалуйста, не перефразируйте результаты. – Potatoswatter

+0

У вас отсутствует один '% d' в' printf', он должен быть 'printf («% d% d% d », ...)' –

+0

@Potatoswatter, я думаю, что с помощью «одиночной инверсной запятой» OP означает " апостроф "или" одинарная кавычка ". Что-то говорит мне, что английский не является его/ее первым языком. –

ответ

4

Литералы символов являются целыми числами C. Это означает, что sizeof('3') - это то же самое, что и sizeof(int). На вашей машине это выглядит как 4.

Редакционные примечания:

  1. Не используйте %d в качестве строки формата при печати sizeof результатов. sizeof возвращает size_t, поэтому вместо этого вы должны использовать %zu.

  2. Вы должны использовать правильный прототип для main. То есть: int main(void) или int main(int argc, char **argv). Не только main().

  3. Если вы используете правильный прототип для main, убедитесь, что ваша программа что-то возвращает. return 0; в конце, например.

+1

Что это за «3»? почему размер 2? – Dineshkumar

+0

'' 3 "' является строковым литералом. Он содержит два символа - '' 3'' и завершающий символ '' \ 0'' (нулевой). –

+0

Даже значение null 'будет добавлено для sizeof ("\ 0") [оно дает 2]? – Dineshkumar