Importancia y uso de punteros en C/C++
Uno de los tipos de datos que maneja C/C++ son los pointers (punteros), este tipo de dato es simplemente una variable que contiene la dirección en memoria de otra variable.
Muchas veces su uso es obligatorio para realizar algunas cosas. Aunque para otras cosa no sea obligatorio si uso, el empleo de punteros podría ayudar a crear una aplicación más eficiente que si se hiciera de otra forma. Para entender un poco la utilidad de los punteros, es muy importante entender como funciona la memoria donde se encuentran los datos que utilizaremos en nuestra aplicación.
Por ejemplo: Si se ha declarado una variable del tipo 'int', esta es almacenada en un lugar aleatorio de la memoria, digamos que hemos declarado una variable de tipo 'int' llamada 'var' y que esta está almacenada en la dirección número 1573 de la memoria, entonces sabemos que como una variable de tipo 'int' ocupa 2 bytes de memoria, esta variable 'var' esta ocupando las direcciones de memoria 1573 y 1574, en esos dos espacios está el contenido de la variable 'var'.
Para declarar un puntero, se hace de la siguiente manera:
- int *pi; //Para un puntero a un 'int'.
- char *pc; //Para un puntero a un 'char'.
- float *pf; //Para un puntero a un 'float'.
Y de la misma manera para cualquier otro tipo de dato. Por el uso de ' * ' antes del nombre de la variable, se está indicando que esto es un puntero a una variable del tipo de dato indicado. Ahora bien, ya que tenemos un puntero declarado, hace falta indicar a quién apuntará el puntero. La información que contiene un puntero, es la dirección de una variable.
Si un puntero apunta a la variable 'var' (la cual sabemos que esta en la dirección 1573), entonces, el puntero tendrá el valor de la dirección, que es 1573.
¿Pero como hacer que un puntero apunte a una variable? Pues utilizando el caracter '&' delante de la variable a la que queremos apuntar, obtendríamos su dirección en memoria, entonces se podría realizar de la siguiente manera:
int var=5;
int *pi;
pi = &var;
De esta manera asignamos la dirección de 'var' (&var) al puntero a entero 'pi'.
De esta manera, tenemos un puntero apuntando a una variable, entonces teniendo el valor de la dirección de la variable 'var' en 'pi', podemos tener acceso a la variable a que apunta el puntero indicandolo con el operador ' * ',
por ejemplo:
printf("%dn", *pi);
printf("%d", pi);
Esto da como salida:
5
1573
Esta salida es así, porque hemos indicado el valor a quien apunta 'pi' indicandolo así: '*pi', y luego indicamos la dirección de la variable a quien apunta 'pi'.
Un ejemplo clásico del uso de punteros es el querer crear una función a la cual le pasemos como parámetros dos variables y esta función nos intercambie los valores de dichas variables.
Si se intenta hacer de la siguiente manera:
Codigo:
1 |
<?phpvoid cambiar(int var1, int var2)
|
1 |
<?phpvoid cambiar(int *pvar1, int *pvar2)
|