2010-02-04 10 views
6

Spojrzałem, ale nie mogłem znaleźć przyzwoitej odpowiedzi.Jak działa printf?

Zastanawiałem się jak printf działa w takim wypadku:

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

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

Myślałam, że printf tylko spacery po formacie i gdy encouter% d na przykład czyta 4 bajty z To aktualnej pozycji. .. jednak to musi być błędne przekonanie, że powyższe działa doskonale.

więc, gdzie się mylę?

+0

'int' nie musi być 4 bajtami. –

Odpowiedz

9

Masz rację. Ale jest argument promotion, który konwertuje (między innymi) twoje char: s na int: s, gdy są używane z funkcją "varargs", jak printf().

+0

Ponadto, pływaki są promowane do podwójnych. –

1

Kiedy mówisz:

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

łańcuch a wynik oceny dwóch wyrażeń tablicowych są umieszczane na stosie i printf nazywa. printf pobiera ciąg ze stosu i używa zawartych w nim formaterów%, aby uzyskać dostęp do innych ułożonych argumentów w sekwencji. Dokładnie, jak to działa, zależy od rzeczywistej wartości% - na przykład %d czyta 4 bajty, ale %f czyta 8 (dla większości 32-bitowych architektur).