Domine apuntadores en C

Páginas: 8 (1794 palabras) Publicado: 4 de mayo de 2013
Domine apuntadores en C/C++
Una de las características más poderosas que tiene C y que hereda C++, es la posibilidad de tener variables que apunten a otra variable, lo que se denomina apuntadores. Sin embargo los punteros o apuntadores es una de las características menos comprendidas por muchos programadores, sin embargo los apuntadores están gobernados por una serie de reglas muy bien definidasy que si son comprendidas se puede dominar el arte de la indirección de una manera muy sencilla.

En éste artículo voy a describir cuáles son las reglas que rigen el comportamiento de los apuntadores y mediante algunos ejercicios podremos comprobar que podemos llegar a dominarlos si las comprendemos.

Los atributos de las variables

Una variable es útil debido a que nos permite almacenar enla memoria RAM un valor. De hecho una variable común y corriente tiene dos atributos que permiten que esto sea posible.

A continuación se muestra una declaración en C/C++. Esta declaración se puede representar como se muestra a continuación en memoria RAM. (Cabe mencionar que el esquema siguiente es una representación con fines didácticos y no muy precisa cuyo único objetivo es representar dealguna manera como podríamos visualizar una asignación de una variable.) FIGURA1

int x = 3;



FIGURA1. Esquema que muestra la asignación de una variable entera x en Memoria RAM.


De aquí, podríamos concluir que una variable (común y corriente) tiene dos atributos. Su contenido (en éste caso el 3) y su dirección (donde vive en la RAM, en éste caso FFFH8.) El poder de las variablespuntero radica en que tienen tres atributos y no dos como en el caso anterior.

A continuación veremos la declaración de un apuntador inicializandolo a qué apunte a x. FIGURA2

int *p = &x;




FIGURA2. Esquema que muestra la asignación de una variable puntero p y su inicialización en Memoria RAM.

En este caso podemos descubrir que un apuntador tiene 3 atributos: Su contenido (quees una dirección y en éste caso es FFF8), su dirección (donde vive en la RAM, y que es muy diferente a la dirección que guarda en el contenido, en éste caso es FFFA), y finalmente un valor indirecto (a lo que apunta).

El poder de un apuntador se desencadena precisamente por su valor indirecto. La posibilidad de accesar a otra variable tomando como “referencia” el contenido del apuntador. ¡Eneste caso el valor indirecto es 3!. Es decir podemos accesar a x desde p.

Operadores de indirección

Para poder lograr lo anterior, en C/C++ se han desarrollado algunos operadores que permiten accesar a cada uno de los atributos de una variable normal y de un apuntador. Estos operadores son llamados operadores de indirección y son el * y el &.

Por ejemplo, es posible accesar a los dosatributos de la variable x tomando en cuenta lo siguiente:

Referencia Atributo
x Nos da el contenido de x
&x Nos da la dirección donde “vive“ x.


Para el caso de la variable puntero p tenemos:

Referencia Atributo
p Nos da el contenido de p. (Una dirección)
&p Nos da la dirección donde “vive“ p.
*p Nos da su valor indirecto.


De lo anterior, podemos afirmar que una expresión que tuvierauna referencia a *x generaría un error de compilación, debido a que el atributo de valor indirecto solo es exclusivo de variables puntero.

Pero antes de continuar debemos analizar aún más la declaración int *p = &x; ¿Qué es lo que hace que este tipo de expresiones sean válidas?

Los niveles de indirección

Es muy importante comprender que existen ciertos niveles de indirección parapoder asignar un valor a una variable puntero. Estos niveles se asemejan a una escalera en donde el piso es el nivel 0. Cada operación realizada mediante el operador de indirección sube o baja un nivel de indirección.

Por ejemplo para el caso de la variable x. ¿Cuáles serían sus niveles de indirección? FIGURA3






FIGURA3. En esta figura podemos constatar en qué nivel se encuentra...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Apuntadores en C
  • Apuntes c#
  • Apuntadores En C
  • Apuntadores En C++
  • Apuntes de c
  • C++ apuntes
  • Apuntes De C#
  • apuntes c++

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS