Подтвердить что ты не робот

Одинарные, двойные кавычки и sizeof ('a') в C/С++

Я рассматривал вопрос Одинарные кавычки и двойные кавычки на C или С++. Я не мог полностью понять объяснение, поэтому я написал программу:

#include <stdio.h>
int main()
{
  char ch = 'a';
  printf("sizeof(ch) :%d\n", sizeof(ch));
  printf("sizeof(\'a\') :%d\n", sizeof('a'));
  printf("sizeof(\"a\") :%d\n", sizeof("a"));
  printf("sizeof(char) :%d\n", sizeof(char));
  printf("sizeof(int) :%d\n", sizeof(int));
  return 0;
}

Я скомпилировал их, используя gcc и g++, и это мои выходы:

НКА:

sizeof(ch)   : 1  
sizeof('a')  : 4  
sizeof("a")  : 2  
sizeof(char) : 1  
sizeof(int)  : 4  

г ++:

sizeof(ch)   : 1  
sizeof('a')  : 1  
sizeof("a")  : 2  
sizeof(char) : 1  
sizeof(int)  : 4  

Выход g++ имеет смысл для меня, и я не сомневаюсь в этом. В gcc необходимо, чтобы sizeof('a') отличался от sizeof(char)? Есть ли какая-то фактическая причина или это просто исторический?

Также в C, если char и 'a' имеют разный размер, означает ли это, что когда мы пишем char ch = 'a';, мы делаем неявное преобразование типов?

4b9b3361

Ответ 1

В C символьные константы, такие как 'a', имеют тип int, в С++ он char.

Относительно последнего вопроса, да,

char ch = 'a';

вызывает неявное преобразование int в char.

Ответ 2

потому что нет char только intgers, связанных int character

как a is 62 я guess

если вы попробуете printf ( "% c", 62); вы увидите символ