Punteros

12. Variables sin nombres

Visto punteros, podemos ir un poco mas allá y utilizar varaibles, pero sin que necesariamente esas varaibles tengan nombres, esto es posible por que un puntero  TIENE un nombre.. y se puede usar el nombre del puntero, para acceder al contenido de donde apunta un puntero.

Veamos un ejemplo;

#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
float *pa;//declaro puntero pero no hay espacio reservado en memoria.
*pa=20.0; // busco que el puntero apunte al valor 20.0
cout<<*pa;
return 0;
}
Este código tira una advertencia al compilar:


Veamos que hace cada línea para entender el por que del error.
Linea 5 : declaro un puntero, pero la declaración NO usa lugar en memoria.
Linea 6 : trato de lograr que el puntero apunte  a 20, pero el puntero NO tiene lugar asignado en memoria al momento de compilar  por lo que NO puedo asegurar que se pueda inicializar, por lo que tira WARNING!!
Si se ejecuta el programa a pesar de la advertencia al  finalizar el programa tira:



SIGSEGV es una señal (signal) en Unix-Linux e implica que el programa ha direccionado memoria fuera de los límites que tenía asignado para su ejecución o segmento de memoria

Veamos el operador new, que permite RESERVAR un espacio en memoria que SI PODEMOS inicializar.

#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
float *pa;//declaro puntero
pa=new float;//con new reservo un espacio
*pa=20.0; // busco que el puntero apunte al valor 20.0
cout<<*pa;
return 0;
}
En este caso el programa funciona correctamente, ya que se reserva un espacio con el operador new  de la línea 6.

Para fijar conceptos vamos a mostrar de manera gráfica.