2009-04-29 3 views

Répondre

36

L'argument de NSLog doit être un NSString, si vous voulez

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

Mieux encore, nous @ "% p". % x formate une valeur entière en hexadécimal, tandis que% p est spécifique aux pointeurs, et remplit en outre la représentation hexadécimale imprimée. –

+0

Bon point! J'ai mis à jour la réponse en conséquence :) – smorgan

4

Essayez:

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

ou

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

La première version utilise l'impression spécifique pointeur format, qui suppose que le paramètre passé est un pointeur, mais le traite en interne comme un long.

La deuxième version prend l'adresse, puis jette à un entier long. Cela est nécessaire pour la portabilité sur les plates-formes 64 bits, car sans le qualificatif de format "l", cela supposerait que la valeur fournie est un entier, généralement de 32 bits seulement.

+1

Je recommanderais contre la deuxième version, vous ne gagnez rien. % p fonctionne déjà comme prévu sur les plates-formes 32 ou 64 bits. –

+0

d'Apple mentionne spécifiquement eux-mêmes la dernière méthode: http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW1 – Alnitak

0

NSLog (@ "% x", & myIntVar); % X est longtemps int ou vous pouvez imprimer comme NSLog (@ "% p", & myIntVar); % P est pour pointeur

Questions connexes