Ver Mensaje Individual
  #37 (permalink)  
Antiguo 25/09/2006, 06:38
MaxExtreme
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 2 meses
Puntos: 17
Nivel7, te repondo primero a la desacreditación que me has lanzado:

Cita:
Creo tener los punteros bastante claros, y no, no "ando mal" como dices. Que tengo ya tiempo con C... ¿Crees que habría logrado hacer lo del SO que te mostré si no supiera como funciona la aritmética de punteros? Andaaa... casi cuela ;)

Estamos hablando de que a un (char *) le da exactamente igual que tipo le sumes.

La aritmética de punteros puede hacerse de las dos maneras, y da exactamente igual como yo dije.

Si tú a un char * le sumas (char)K, incrementarás K bytes.
Si tú a un char * le sumas (short)K, incrementarás K bytes.
Si tú a un char * le sumas (int)K, incrementarás K bytes.
... y lo mismo siempre.

Igualmente, como un puntero no es más que un entero,

Si tú a un char * le sumas (T *)K, incrementarás K bytes.

Resumen: Da igual hacer "p+1" que "p+q".
Ahora te respondo más a fondo acerca de tu afirmación inicial, para que entiendas que el equivocado eras tú:

Cita:
Dices 3 cosas mal en una sola frase.



1ª "lo ideal, es que la aritmetica de punteros se realize entre punteros"

La suma de dos punteros no tiene nada que ver con aritmética de punteros.

La aritmétca de punteros se da cuando sumas a un puntero un entero, no cuando sumas dos punteros.



2ª "lo ideal, es que la aritmetica de punteros se realize entre punteros"

De hecho, precisamente porque la aritmética de punteros NO se da entre punteros, NO tiene sentido sumar entre punteros.

Lo normal es es sumar a un puntero una dirección, para moverte en la memoria con seguridad usando la aritmética de punteros sin preocuparte de tipos y tamaños.



3ª "lo ideal, es que la aritmetica de punteros se realize entre punteros del mismo tipo"

Un puntero no es más que un entero que representa una dirección de memoria (en x86, unsigned int), y como tal:

Da exactamente igual del tipo que sean. Numéricamente:

void * = char * = int * = T *

¿Por qué te crees que sino existe el tipo void *?...
Como ves, podía haberte respondido todo esto último la primera vez, pero NO LO HAGO, porque no me gusta desacreditar de tal manera a la gente, y que se den cuenta de sus errores ellos solos.

Pero tú veo que vas a matar a la primera ;) Como ves, yo también puedo contestar con parrafadas :D

Última edición por MaxExtreme; 25/09/2006 a las 07:10