%p Formatbezeichner in c

Lesezeit: 2 Minuten

Benutzer-Avatar
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

Benutzer-Avatar
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

Benutzer-Avatar
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

1246820cookie-check%p Formatbezeichner in c

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy