[C con Clase] Capitulo 12

David xdrtas en yahoo.es
Mie Ene 31 17:13:12 CET 2007


Hola a todos, tengo una duda con un texto que sale en el capitulo 12 de C++ con clase el ejemplo al que se refiere el texto es el siguiente:

int vector[10]; 
int *puntero;
 
puntero = vector; /* Equivale a puntero = &vector[0]; 
esto se lee como "dirección del primer de vector" */ 
*puntero++; /* Equivale a vector[0]++; */ 
puntero++; /* puntero equivale a &vector[1] */ 

El texto dice lo siguiente, en referencia a la última línea de el ejemplo anterior:

"La segunda incrementa el puntero, esto significa que apuntará a la posición 
  de memoria del siguiente "int", pero no a la siguiente posición 
  de memoria. El puntero no se incrementará en una unidad, como tal vez 
  sería lógico esperar, sino en la longitud de un "int"."

Aquí es donde me confundo, al ejecutar la aplicación, me dí cuenta de que "puntero" si cambia a la siguiente posicición de memoria aunque en el texto anterior dice que no, esto me lo pueden explicar, porque yo no lo veo, verán el resultado que a mi me da al incrementar puntero es el siguiente:

El valor es: 9
Memoria  es: 0x0012FF58
El valor es: 8
Memoria  es: 0x0012FF5C
El valor es: 7
Memoria  es: 0x0012FF60
El valor es: 6
Memoria  es: 0x0012FF64
El valor es: 5

Como se puede apreciar el incremento de la dirección de la variable "puntero" es de 4bytes, el siguiente "int" al que se refiere en el texto anterior, pero también, cada vez que ejecuto la siguiente línea "puntero++", me pasa a la siguiente posición de memoria del vector.


El otro problema que me surge es que si quiero hacer referencia al primer elemento del vector desde el puntero una vez incrementado x veces, no puedo colocar la siguiente línea "puntero[0]", sino que tengo que colocar el valor en negativo segun las x veces que haya ejecutado "puntero++", ejemplo:

Si he incrementado "puntero" 3 veces entonces para visualizar el primer valor del puntero  tengo que  escribir lo siguiente: 
cout << puntero[-3] << endl;

Les coloco el código completo para que lo vean:

#include <iostream.h>
int main (){
    int *p;
    int aArr[10] = {9,8,7,6,5,4,3,2,1,0};
    p = aArr;
    cout << "Memoria  es: " << p << endl;
    cout << "El valor es: " << *p << endl;
    *p++;
    cout << "Memoria  es: " << p << endl;
    cout << "El valor es: " << *p << endl;
    p++;
    cout << "Memoria  es: " << p << endl;
    cout << "El valor es: " << *p << endl;
    p++;
    cout << "Memoria  es: " << p << endl;
    cout << "El valor es: " << *p << endl;
    p++;
    cout << "Memoria  es: " << p << endl;
    cout << "El valor es: " << *p << endl;

    cout << "Memoria  es: " << p[-4] << endl;
    cin.get();
    return 0;
}

Alguien puede explicarme porque sucede esto, si el puntero no cambia de posición de memoria, no debería mostrar otro valor cuando se coloca *puntero[0];

Muchas gracias. 



		
______________________________________________ 
LLama Gratis a cualquier PC del Mundo. 
Llamadas a fijos y móviles desde 1 céntimo por minuto. 
http://es.voice.yahoo.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070131/d900532d/attachment.html>


Más información sobre la lista de distribución Cconclase