Ver Mensaje Individual
  #34 (permalink)  
Antiguo 23/09/2006, 19:27
Nivel7
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 1 mes
Puntos: 2
oy eInstru, sin la intencion de molestar, pero creo que tu algoritmo no funciona con todos los campos, y enesto MaxExtreme tambien anda mal,
ya que el comento:

En realidad, da =.

La aritmética de punteros se puede hacer tanto con enteros (como Instru hizo), lo cual es el uso normal, o como tú has hecho, sumando punteros (no muy normal).

p+1; // Instru
p+q // Nivel7

y esto no es del todo cierto.

tu algortimo funciona siempre y cuando el campo en cuestion sea un char, esto es por que la aritmetica de punteros sabe de tipos.

es decir, si tu puntero es de tipo char, al restarle o sumarle se incrementara en un byte a la ves, es decir una posicion en memoria.
pero si tu puntero es te tipo int, al restarle o sumarle se incrementara o decrementara en 4 bytes.
por tanto si en el problema, si el campo en cuestion es un int com es el caso de Edad, y tu le restas 1, no obtendras la direccion de la estructura sino una direccion menor que la que realmente quieres. ya que el offset de es 4, que es el tamaño de un puntero(char*), por tanto al restarle 4 a &miFicha.Edad, se decrementara en 4 int's, es decir 4*4 = 16 byte's.
entonces estaremos en 12 bytes antes que &miFicha.

Última edición por Nivel7; 23/09/2006 a las 19:59