Punteros

6. Operadores Nuevos

En esta sección veremos 2 nuevos operadores:

  • Operador de Indirección:   *  (asterisco)

    • Este operador aplicado sobre una variable, indica que esta variable almacena una DIRECCIÓN de memoria.
    • Notar que una dirección de memoria no tiene tipo en si mismo, pero apunta a un datos que SI tiene tipo.
    • float *p,a=3;//el puntero p apuntará en el futuro a una varaible real


  • Operador de Dirección: & (ampersand)


    • Este operador aplicado sobre una variable regresa o "saca" la dirección de la variable.
    • float *p,a=3;
    • p=&a //"saco" la dirección de a y la guardo en una variable puntero.


  • Operador new

    • El operador new sirve para reservar memoria dinámica, esto es durante la ejecución del programa.

    • El operador new retorna una dirección de memoria que es la memoria reservada.

    • Si la reserva de memoria no tuvo éxito, new devuelve un puntero nulo,

    • Se pueden solicitar VARIOS espacios de memoria utilizando la sintaxis:
      • Nombre_de_puntero = new type  //para un solo espacio
      • Nombre_de_puntero = new type [N] // para N espacios
  • Ejemplos de sintaxis:

	int *p; //Declaro puntero a un entero
	float *x;  //Declaro puntero a un real
	char *text;  //Declaro puntero a un char
	p=new int[4];// reserva 4 espacios para enteros de manera contigua.
	x=new float[4];// reserva 4 espacios para reales de manera contigua.
	text=new char[11];// reserva 11 espacios para caracteres de manera contigua.

Operador Delete: del

  • En la mayoría de los casos, la memoria asignada dinámicamente (con new) solo es necesaria durante períodos específicos de tiempo dentro de un programa; una vez que ya no se necesita, se debe liberar para que la memoria vuelva a estar disponible para otras solicitudes de memoria dinámica.
  • Sintaxis es:
    • delete pointer;// para borrar UN solo puntero
      delete[] pointer;// para borrar arreglo de punteros


Aclaración

si se solicitó memoria como arreglo con new[ ] la misma no se puede liberar de a una posición con delete, se debe liberar el conjunto completo con delete[ ].

https://stackoverflow.com/questions/18016295/deleting-elements-of-a-dynamic-array-one-by-one