2009-04-29 44 views

Respuesta

36

El argumento para NSLog necesario que haya un NSString, por lo que desea

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

Mejor aún, nosotros @ "% p". % x formatea un valor entero como hexadecimal, mientras que% p es específicamente para punteros, y además rellena la representación hexadecimal que imprime. –

+0

¡Buen punto! He actualizado la respuesta en consecuencia :) – smorgan

4

Probar:

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

o

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

La primera versión utiliza la impresión puntero específica formato, que asume que el parámetro pasado es un puntero, pero internamente lo trata como un largo.

La segunda versión toma la dirección, entonces arroja a un entero largo. Esto es necesario para la portabilidad en plataformas de 64 bits, ya que sin el calificador de formato "l" supondría que el valor suministrado es un número entero, típicamente de solo 32 bits de longitud.

+1

Recomiendo contra la segunda versión, no ganas nada. % p ya funciona como se esperaba en plataformas de 32 o 64 bits. –

+0

de Apple menciona específicamente el último método mismos: http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW1 – Alnitak

0

NSLog (@ "% x", & myIntVar); % X es por mucho tiempo int o puede imprimir como NSLog (@ "% p", & myIntVar); % P es de puntero

Cuestiones relacionadas