¿Cuál es el tamaño de los caracteres en C y C ++? Hasta donde sé, el tamaño de char es de 1 byte en C y C ++.
#include <stdio.h>
int main()
{
printf("Size of char : %d\n", sizeof(char));
return 0;
}
#include <iostream>
int main()
{
std::cout << "Size of char : " << sizeof(char) << "\n";
return 0;
}
Sin sorpresas, ambos dan la salida: Size of char : 1
Ahora sabemos que los personajes son representados como 'a', 'b', 'c', '|', ... Así que acaba de modificar los códigos anteriores a éstos:
C ª:
#include <stdio.h>
int main()
{
char a = 'a';
printf("Size of char : %d\n", sizeof(a));
printf("Size of char : %d\n", sizeof('a'));
return 0;
}
Size of char : 1
Size of char : 4
En C ++:
#include <iostream>
int main()
{
char a = 'a';
std::cout << "Size of char : " << sizeof(a) << "\n";
std::cout << "Size of char : " << sizeof('a') << "\n";
return 0;
}
Size of char : 1
Size of char : 1
¿Por qué sizeof('a')devuelve diferentes valores en C y C ++?

"%|"formato requiere unintargumento (o algo que promuevaint).sizeofproduce un resultado de tiposize_t. Conviértase aintusar un reparto o, si su implementación lo admite, use"%zu".Respuestas:
En C, el tipo de una constante de carácter como
'a'es en realidad unint, con un tamaño de 4 (o algún otro valor dependiente de la implementación). En C ++, el tipo eschar, con un tamaño de 1. Esta es una de las muchas pequeñas diferencias entre los dos lenguajes.fuente
intachar, lo que explica el comportamiento. :)Como dijo Paul, es porque
'a'es uninten C pero uncharen C ++.Cubro esa diferencia específica entre C y C ++ en algo que escribí hace unos años, en: http://david.tribble.com/text/cdiffs.htm
fuente
En C, el tipo de literales de caracteres son int y char en C ++. Esto se requiere en C ++ para soportar la sobrecarga de funciones . Ver este ejemplo:
Salida:
fuente
En lenguaje C , el carácter literal no es un
chartipo. C considera el carácter literal como entero. Entonces, no hay diferencia entresizeof('a')ysizeof(1).Entonces, el literal sizeof de caracteres es igual a sizeof entero en C.
En lenguaje C ++ , el carácter literal es tipo de
char. La cppreference dice:Entonces, en C ++ el literal de caracteres es un tipo de
char. entonces, el tamaño del carácter literal en C ++ es un byte.Alos, en sus programas, ha utilizado un especificador de formato incorrecto para el
sizeofoperador.C11 §7.21.6.1 (P9):
Por lo tanto, debe usar el
%zuespecificador de formato en lugar de%d, de lo contrario, es un comportamiento indefinido en C.fuente
%zuno es compatible con muchas plataformas, pero mejor portabilidad, uso(int)sizeof(char)y formato%dchartipo está firmado o no de forma predeterminada.