Wie sind die Spezifizierer %p
und %Fp
in folgendem Code arbeiten?
void main()
{
int i=85;
printf("%p %Fp",i,i);
getch();
}
Ich bekomme das o/p as 0000000000000055 0000000000000055
Armer
Wie sind die Spezifizierer %p
und %Fp
in folgendem Code arbeiten?
void main()
{
int i=85;
printf("%p %Fp",i,i);
getch();
}
Ich bekomme das o/p as 0000000000000055 0000000000000055
Wenn Sie danach fragen, geben %p und %Fp einen Zeiger aus, insbesondere die Adresse, auf die sich der Zeiger bezieht, und da es einen Teil der Architektur Ihres Computers ausgibt, tut es dies in Hexadezimal.
In C können Sie zwischen einem Zeiger und einem Int umwandeln, da ein Zeiger nur eine 32-Bit- oder 64-Bit-Zahl ist (abhängig von der Maschinenarchitektur), die sich auf den oben genannten Teil des Speichers bezieht.
Und natürlich ist 55 in Hex 85 in Dezimalzahl.
%Fp ist nicht für Zeiger, je nach Compiler. Für gcc/clang steht %F für Float, ähnlich wie %f mit einem kleinen Unterschied. Folgende p
wird als normales Zeichen zum Drucken behandelt.
– halb
28. September 2012 um 3:23 Uhr
hmm, also warum bekommt er 000…. 55 zweimal und kein p? (ich stimme dir zu, da ich es gerade selbst ausgeführt habe)
– David Christo
28. September 2012 um 3:28 Uhr
%p dient zum Drucken einer Zeigeradresse.
85 in Dezimalzahl ist 55 in Hexadezimalzahl.
Auf Ihrem System sind Zeiger 64-Bit, also ist die vollständige Hexadezimaldarstellung: 0000000000000055
Hier ist die Kompilierungsausgabe von meinem Computer:
format.c:7:5: Warnung: Format ‘%p’ erwartet Argument vom Typ ‘void *’, aber Argument 2 hat den Typ ‘int’ [-Wformat]
format.c:7:5: Warnung: Format ‘%F’ erwartet Argument vom Typ ‘double’, aber Argument 3 hat den Typ ‘int’ [-Wformat]
Es gibt also Warnungen, aber es wird kompiliert und die Ausgabe lautet: 0x55 0.000000p
Ich bin überrascht, dass du am Ende kein Ap bekommst. Sind Sie sicher, dass Code und Ausgabe übereinstimmen? Ich denke, es ist nicht unmöglich, dass die Adresse von i auch 0x0 … 055 ist … aber hier sieht etwas falsch aus.
Übrigens: Die typische Verwendung von %p wäre die Ausgabe einer Adresse, dh &i im Gegensatz zu einem int
reegan vijay
Sein Zweck besteht darin, einen Zeigerwert in einem von der Implementierung definierten Format zu drucken. Das entsprechende Argument muss a sein void *
Wert.
Und %p
wird verwendet, um die Adresse eines Zeigers zu drucken, die Adressen hängen von unserem Systembit ab.
Ergänzung zu dem, was @Myforwik gesagt hat
%p dient zum Drucken einer Zeigeradresse.
%Fp wird wahrscheinlich verwendet, um einen FAR-Zeiger zu formatieren, der die Form hat –> (0x1234:0x5678)
und 85 in Dezimalzahl ist 55 in Hexadezimalzahl.
Ich hoffe es ist jetzt okay.
Verweise :
http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/FUNCTIONS/format.html
http://www.winehq.org/pipermail/wine-devel/2005-March/034390.html
Imtiaj Sreejon
%p
ist zum Drucken einer Adresse, aber Sie müssen die verwenden ampersand
dh &
Betreiber vor i
um die Adresse zu bekommen i
Um also die Adresse der Variablen zu erhalten i
Das richtige Format lautet:
void main()
{
int i=85;
printf("%p %Fp", &i, &i);
getch();
}
wenn Sie nicht verwenden &
dann bekommst du nur den Wert, der in enthalten ist i
was in diesem Fall ist 85
oder 55
in hex