Ich habe mit einigen Interviewfragen gearbeitet, als ich diesen Code gefunden habe.
%Vor%Es wird Folgendes gedruckt:
%Vor%Ich kann nicht verstehen, wie die printf-Funktion hier funktioniert.
Sehen wir uns das erste Argument für den printf()
-Aufruf an.
Dies verweist auf das gleiche wie ptr
im folgenden Code.
Also, was bedeutet es, einen Zeiger zu erhöhen? Nun, wir bringen den Zeiger sizeof(*ptr) * 1
bytes vorwärts.
Also, im Gedächtnis haben wir:
%Vor%Also ist Ihr Code mehr oder weniger funktional äquivalent zu:
%Vor% Dies wertet das zusätzliche Funktionsargument aus und ignoriert es dann und druckt d
.
Noch eine Sache: Sie sind sehr nahe daran, in diesem Code undefiniertes Verhalten zu verursachen. printf("%d", a)
verwendet die falsche Formatzeichenfolge. Die korrekte Formatzeichenfolge für short int
ist "%hd"
.
Sie finden hier eine vollständige Tabelle mit Formatstrings .
Dies ist meine Antwort basierend auf @DCoders Kommentar. "%d"
ist ein Zeiger auf das erste Zeichen des aus zwei Zeichen bestehenden Arrays %d
. Wenn Sie dies um eins erhöhen, wird ein Zeiger auf d
angezeigt. Die Tatsache, dass es ein zweites Argument gibt, spielt keine Rolle, da das Ergebnis "%d"+1
einfach das Zeichen d
ist. Wenn Sie 0
hinzufügen, lautet Ihre Ausgabe 5
wie erwartet. Wenn Sie 2
hinzufügen, gibt es keine Ausgabe, da nur ""
an printf
übergeben wird.
In diesem Fall printf("%d"+1,a);
= printf("d",a)
.
Sie geben printf
zum Drucken von +1 an, also "d"
, so dass printf
einfach d
auf dem Bildschirm ausgibt.