Cita:
Iniciado por Cardo2095 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 originalcout << pv+1; //imprime la dirección de memoria del segundo elemento (p[1])
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 originalcout << *(pv+1) + 3; //el contenido que era 1, le sumas 3 unidades, se obtiene 4
Saludos