Puntero+indice

Iniciado por Binary_Death, 18 Agosto 2010, 02:50 AM

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

Binary_Death

Verán... mi duda es la siguiente.

Yo tengo el siguiente código:


#include <stdio.h>
int main()
{
    int array[5] = {1, 2, 3, 4, 5};
    int *point = array;
    printf("%d", *(point+1));
    return 0;
}


El cual funciona correctamente, sin complicación.
La cosa es, yo defino un array de 5 elementos de tipo int, ok. Luego le asigno la dirección de inicio del array al puntero "point", el cual declaro. Y despues con un printf, imprimo el contenido de la dirección a la que apunta point más un desplazamiento de 1.
Si cada celda de memoria ocupa un byte, lo normal seria que el +1 apuntara al siguiente byte de memoria. La cosa es que un tipo int ocupa 4 bytes... entonces, el puntero apuntaría al siguiente byte, donde no están contenidos los 4 bytes completos del siguiente elemento del array.

Se me entiende?... en fin, agradecería que alguien pudiera explicarmelo.

Saludos ^^

Og.

#1
Al sumarle un 1 a un tipo int* realmente le sumaras 4 bytes.
si el puntero fuese a un char* al sumarle 1 si te moverias al siguiente byte.
Código (cpp) [Seleccionar]
int main(void)
{
   int *prueba = new int;
   cout << prueba++ << endl << prueba << endl;
   long *prueba2 = new long;
   cout << prueba2++ << endl << prueba2 << endl;
   return 0;
}

Prueba ese código.

Saludos!
|-

Binary_Death

Muchas gracias, entendido a la perfección =)

do-while

¡Buenas!

Lo que ha dicho Og. es correcto, simplemente queria describir la regla general sobre puntero-deplazamiento:

Si tenemos un tipo de dato dato_t, y un puntero a ese tipo de dato, dato_ptr, hacer dato_ptr + k equivale a apuntar a la posicion de memoria
dato_ptr + k * sizeof(dato_t).

¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!