Punteros en C/C++

>> //seccion/c/ -- 0 comentario /// Agregado el 2004-02-08 @ Por kaioken

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
2
3
4
5
6
7
<?phpvoid cambiar(int var1int var2

    
int temporal
    
temporal var1
    
var1 var2
    
var2 temporal
}
?>


Llamando a la función así 'cambiar(var1, var2);' no cambiaría los valores, ya que se le pasan los valores de dichas variables a la función, pero dentro de la función se cambia los valores en las variables propias de la función que contienen los valores originales de las variables deseadas a modificar.
Esto es porque las variables 'var1' y var2' que están fuera de la función 'cambiar()' son distintas a las que maneja la función. Entonces, la forma de hacer esto es utilizando punteros, pasandole así las direcciones de las variables a la función, para que así esta la utilice directamente y haga los cambios necesarios, la función vendría resultando de la siguiente manera:

Codigo:
1
2
3
4
5
6
7
<?phpvoid cambiar(int *pvar1int *pvar2

    
int temporal
    
temporal = *pvar1
    *
pvar1 = *pvar2
    *
pvar2 temporal
}
?>


Con esta función si se puede obtener el resultado deseado, ya que le pasamos a la función las direcciones de las variables de la forma: 'cambiar(&var1, &var2);', y la función utiliza los punteros y mueve a la variable a quien apunta 'pvar1' el valor de la variable a quien apunta 'pvar2' y luego mueve a la variable a quien apunta 'pvar2' el valor a quien apuntaba 'pvar1' que fue almacenada en una variable temporal llamada 'temporal'.

Así concluímos con una breve explicación los punteros en C los cuales son muy útil y tienen muchas aplicaciones importantes, tanto como para mejorar la compactibilidad del código como también son muy importante de conocer, ya que muchas funciones avanzadas de C utilizan punteros como parámetros para su funcionamiento.