Intenté ejecutar el siguiente progtwig en C y obtuve algunos resultados. ¿Me pueden ayudar por qué?
#include int main() { char x='A'; printf("%d%d%d",sizeof("3"),sizeof('3'),sizeof(3)); return 0; }
La salida recibida es 2 4 4 usando gcc en ubuntu 11.04 32 bit.
Del mismo modo en otro progtwig: –
#include int main() { char x='A'; printf("%d%d",sizeof('A'),sizeof(x)); return 0; }
La salida recibida es 4 1 usando GCC en ubuntu 11.04 32 bit.
¿Me pueden ayudar por qué la salida es así?
En C, los literales de caracteres son de tipo entero, por lo que sizeof('3') == sizeof(int)
. Ver esta C Preguntas frecuentes para más detalles.
Esta es una de las áreas donde C y C ++ difieren (en C ++ sizeof('3')
es 1
).
En realidad, corrigiendo mi afirmación anterior, sizeof("3")
producirá 2 porque “3” se trata como una matriz de caracteres de 2 elementos.
6.3.2.1/3
Excepto cuando es el operando del operador sizeof o el operador unario &, o si se utiliza un literal de cadena para inicializar una matriz, una expresión que tiene el tipo “matriz de tipo” se convierte en una expresión con el puntero de tipo a ” escriba “” que apunta al elemento inicial del objeto de matriz y no es un valor l.
Cía
3
: literal entero, escriba int
'3'
: char literal, escribe int
"3"
: cadena literal: escriba char[2]
En su segundo ejemplo, x
denota un objeto de tipo char
.
El ‘3’ se convierte al tipo int, que es de 4 bytes. Sin embargo, “3” es una cadena con dos bytes. El primer byte es el char 3 y el segundo es el terminador nulo que se agrega a todas las cadenas.
“C” es
char mystring[2]; mystring[0] = 'C'; mystring[1] = '\0';
Mientras que ‘c’ es
int mychar; mychar = 'C';
'3'
es una constante de carácter. En C, las constantes de caracteres tienen tipo int
(en C ++, tienen tipo char
). Por lo tanto, sizeof '3'
== sizeof (int)
.
"3"
es una cadena literal. Es una matriz de 2 elementos de char
( const char
en C ++) con los valores {'3', '\0'}
. sizeof (char)
== 1 por definición, por lo tanto, sizeof "3"
== 2.
3
es una constante entera. Tiene tipo int
. Por lo tanto, sizeof 3
== sizeof (int)
.
La variable x
se declara como char
, por lo tanto sizeof x
== 1.