arrays y punteros.

Iniciado por 4dr14n31t0r, 24 Septiembre 2016, 00:48 AM

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

4dr14n31t0r

Código (cpp) [Seleccionar]
int array[5];
array[0] = 12;
std::cout << &array << std::endl;//1
std::cout << array  << std::endl;//2
std::cout << *array << std::endl;//3


Con el codigo anterior se puede apreciar claramente que la direccion de memoria en la que esta localizado el array (1) coincide con la direccion de memoria a la que apunta el array (2). En otras palabras: los arrays son punteros que se apuntan a si mismos.

Sin embargo, si un puntero se apunta a si mismo, entonces el operador de dereferencia (el asterisco) nos devolvera la direccion de memoria del array otra vez, ya que es lo que contiene la variable. Sin embargo, en vez de eso se nos muestra el int que hayamos guardado ahi. (En este caso, el numero 12). La pregunta es ¿Por qué? Es mas ¿Cómo es posible? Según esto, estamos guardando 2 valores completamente diferentes al mismo tiempo en la misma ubicacion: la direccion de memoria del array(y del primer elemento del mismo array), y el numero 12.

Aqui dejo el codigo completo para que no tengais mas que copiar y pegar directamente:
Código (cpp) [Seleccionar]
#include <iostream>

int main(int argc, char** argv)
{
int array[5];
array[0] = 12;
std::cout << &array << std::endl;//1
std::cout << array  << std::endl;//2
std::cout << *array << std::endl;//3
return 0;
}


Y aqui el link a un entorno de desarrollo online con el codigo para que no tengais que molestaros en abrir ningun programa para probarlo:
https://goo.gl/7LWmg4

geeke

 El nombre de un array no es en esencia un puntero, más bien dependiendo del contexto es convertido implícitamente a un puntero al primer elemento como en este caso sucede con array y *array al imprimirlos. También aclarar que al desreferenciar un puntero accedes al contenido apuntado por tal puntero en este caso el primer valor del array.