Lógica por trás de sizeof () para constantes de caracteres e nomes de funções [duplicado]

Esta questão já tem uma resposta aqui:

Tamanho do caractere ('a') em C / C ++ 4 respostasPor que os literais de caracteres C são ints em vez de chars? 12 respostas

EmC o seguinte código:

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

produz o resultado1 e4? Por favor, explique a lógica?

Além disso, por quesizeof(main()) resulta em4 massizeof(main) resulta em1:

#include<stdio.h>

int main()
{

   printf("%d %d\n",sizeof(main), sizeof(main()));
   return 0;
}

E emC ++ porquesizeof('a') resultam em 1 mas o tamanho de ('av') resulta em 4?

questionAnswers(2)

yourAnswerToTheQuestion