2009-04-29 8 views

Antwort

36

Das Argument NSLog muss ein NSString sein, so dass Sie

NSLog(@"%p", &myIntVar); 
+1

Besser noch, wir @ "% p". % x formatiert einen Ganzzahlwert als Hexadezimalwert, während% p speziell für Zeiger steht und die hexadezimale Darstellung, die es druckt, zusätzlich auffüllt. –

+0

Guter Punkt! Ich habe die Antwort entsprechend aktualisiert :) – smorgan

4

versuchen:

NSLog(@"%p", &myIntVar); 

oder

NSLog(@"%lx", (long)&myIntVar); 

Die erste Version des Zeigers spezifischen Druck verwendet Format, das davon ausgeht, dass der übergebene Parameter ein Zeiger ist, aber intern als Long behandelt wird.

Die zweite Version nimmt die Adresse und wandelt sie dann in eine lange Ganzzahl um. Dies ist für die Portabilität auf 64-Bit-Plattformen erforderlich, da ohne den Formatqualifikator "l" angenommen würde, dass der angegebene Wert eine Ganzzahl ist, typischerweise nur 32 Bit lang.

+1

Ich würde empfehlen, gegen die zweite Version, Sie nichts zu gewinnen. % p funktioniert auf 32- oder 64-Bit-Plattformen bereits wie erwartet. –

+0

Apple erwähnt speziell die letztere Methode selbst: http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW1 – Alnitak

0

Nslog (@ "% x", & myIntVar); % x ist für long int oder Sie können wie Nslog (@ "% p", & myIntVar) drucken; % p ist für Zeiger

Verwandte Themen