2010-02-04 18 views
6

Miré pero no pude encontrar una respuesta decente.¿Cómo funciona printf?

Me preguntaba cómo funciona printf en caso como este:

char arr[2] = {5,6}; 

printf ("%d%d",arr[0],arr[1]); 

Estaba pensando que printf simplemente paseos por el formato y cuando encouter% d, por ejemplo, se lee 4 bytes desde el que de la posición actual. .. sin embargo, eso tiene que ser un concepto erróneo porque lo anterior funciona perfectamente.

Entonces, ¿dónde estoy equivocado?

+0

'int' no necesita tener 4 bytes. –

Respuesta

9

Tienes razón. Pero hay argument promotion que convierte (entre otras cosas) su char: s en int: s cuando se usan con una función "varargs" como printf().

+0

Además, las carrozas se promocionan a dobles. –

1

Cuando dicen:

printf ("%d%d",arr[0],arr[1]); 

la cadena y el resultado de la evaluación de las dos expresiones de matriz se colocan en la pila y printf se llama. printf toma la cadena de la pila y usa los% formateadores en ella para acceder a los otros argumentos apilados en secuencia. Exactamente cómo lo hace depende, como dice en el valor% real, por ejemplo, %d lee 4 bytes pero %f lee 8 (para la mayoría de las arquitecturas de 32 bits).