Incremento de punteros

Iniciado por NathanD, 29 Marzo 2013, 17:43 PM

0 Miembros y 1 Visitante están viendo este tema.

naderST

Cita de: mr.blood en 30 Marzo 2013, 19:57 PM
Aqui teneis otro ejemplo de eso: http://www.portalhacker.net/index.php/topic,126837.0.html

El printf toma los argumentos de derecha a izquierda, por eso muestra "Hola" en vez de "aloH" ;).

Sa1uDoS

Ese código tiene un detalle y es que dependiendo del compilador la salida va  a variar, prueba compilarlo con VC++ y te imprimirá aloH

85

Él ingresa en este orden:


push('H');//1
push('o');//2
push('l');//3
push('a');//4


por lo que en una pila uno espera que estos elementos salgan así:

Citar-> 4, 3, 2, 1


Entonces al llamar a printf que recibe los parámetros a la inversa (derecha a izquierda), entonces quedaría así:

Citar
                                   //1(h)   2(o)   3(l)    4(a)
printf("%c%c%c%c\n",pop(),pop(),pop(),pop());//right to left (1,2,3,4 <-)

El primer parámetro recibido sería el marcado cómo 4, luego el 3 y así.

En visual C++ 6 y 2010 imprime "Hola".
más datos, WINXP SP3 32BITS XD.
Sería raro un compilador que no respetara esto ya que es parte de la convención de llamada de C.


Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/