Código
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
#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