Ver Mensaje Individual
  #8 (permalink)  
Antiguo 28/03/2015, 05:19
Madh
 
Fecha de Ingreso: octubre-2013
Mensajes: 44
Antigüedad: 11 años
Puntos: 5
Respuesta: No entiendo como funciona este metodo

Cita:
Iniciado por Cardo2095 Ver Mensaje
buenas quisiera ver si alguien me puede explicar paso a paso que es lo que hace este método ya que no lo entiendo tiene que ver con punteros


Código PHP:
int main() {

    
int *pv;
    
int dim=4;
    
pv=new int[dim];
    
    for(
int i=0;i<dim;i++)
    
pv[i]=i;
    
cout<<*(pv+3)-1//aca imprime 2 y nose porque
    
    
return 0;

Se trata de un ejemplo acerca de la aritmética de punteros (http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B/Punteros#Aritm.C3.A9tica_de_Punteros).

pv es un puntero, que se redimensiona en un array de tamaño 4. Pues bien, los punteros siempre apuntan a la primera dirección de memoria. ¿Qué podemos hacer si queremos apuntar a otra dirección dentro del array? Tan fácil como utilizar aritmética de punteros, simplemente sumando X unidad. Si queremos obtener la segunda posición del array bastaría con hacer pv+1.



Ahora bien, si muestras por pantalla pv lo que obtienes es una dirección de memoria. Para ver el contenido en esa dirección, es necesario utilizar el "operador indirección" (*). Tendríamos entonces:

Código C++:
Ver original
  1. cout << pv+1; //imprime la dirección de memoria del segundo elemento (p[1])
  2. cout << *(pv+1); //imprime el contenido en esa dirección, es decir, un 1

La última sentencia nos devuelve un entero, por lo que podemos trabajar con él como un número más, como por ejemplo sumarle 3 unidades:

Código C++:
Ver original
  1. cout << *(pv+1) + 3; //el contenido que era 1, le sumas 3 unidades, se obtiene 4

Saludos