Punteros en c

Páginas: 9 (2041 palabras) Publicado: 2 de julio de 2011
Punteros, Arreglos y Cadenas en C
Edgardo Hames
Revisado y corregido por Natalia B. Bidart, 13-08-2006 y despu´s por Daniel F. Moisset, 24-08-2007 e

Punteros y direcciones
Organizaci´n de la memoria: Una computadora t´ o ıpica tiene un arreglo de celdas de memoria numeradas o direccionables que pueden ser manipuladas individualmente o en grupos contiguos. Una situaci´n com´n es que un byteo u sea un caracter (char), un par de celdas de un byte sea tratado como un entero corto (short) y cuatro bytes adyacentes formen un entero largo (long). Un puntero es una variable que contiene la direcci´n de una variable. El uso o de punteros es de m´s bajo nivel, y ofrece m´s expresividad. A veces conduce a a a un c´digo m´s compacto y en algunos casos m´s eficiente; la desventaja es o a a quesin cuidado, es f´cil cometer errores. a

p

i

Figura 1: Organizaci´n de la memoria o

Operadores: El operador unario & retorna la direcci´n de memoria de una variable, o por lo tanto: p = &i;

1

asigna la direcci´n de la variable i a la variable puntero p y se dice o que p “apunta a” i. S´lo se puede aplicar a variables y elementos de o 1 arreglos . Ver Fig. 1. El operador unario *es el operador de indirecci´n o de dereferenciao ci´n; cuando se aplica a un puntero, accede al contenido de la memoria o apuntada por ese puntero. Ver ejemplo ej1.c. j = *p; /* j tiene ahora el valor de i */ El lenguaje C nos permite comprobar los tipos de los objetos apuntados por punteros. Esto se logra definiendo para cada tipo T (por ejemplo int), un tipo para los puntores asociados (porejemplo, puntero a int). Para definir una variable que apunte a celdas con valores de tipo T , se declara esta como si fuera de tipo T , pero anteponiendo el caracter * al nombre de la variable. Por ejemplo: int *p; Esta notaci´n intenta ser mnem´nica, nos dice que la expresi´n *p es o o o un int. Aunque cada puntero apunta a un tipo de dato espec´ ıfico, tambien hay un tipo llamado void * (ser´ un“puntero a void” que ıa puede contener cualquier tipo de punteros. Como cualquier otra variable, es conveniente inicializar un puntero en su declaraci´n. Si el valor no se conocer´ hasta m´s adelante en el o a a c´digo, una buena convenci´n es usar NULL. NULL es un valor especial o o de puntero que no referencia a ninguna celda particular. int *p = NULL; Como los punteros son variables, pueden ser usadossin ser dereferenciados. Por ejemplo, si p y q son punteros a int, p = q; copia el contenido de q en p, o sea, copia la direcci´n a la que apunta o q en p, haciendo que p apunte a lo mismo que apunta q.
es decir, a cualquier cosa que indique una celda de memoria. Comparese con otros operadores como que pueden aplicarse a cualquier cosa que tenga un valor
1

2

Los operadores & y * asociancon mayor precedencia que los operadores aritm´ticos. Por lo tanto, cualquiera de las siguientes instrucciones e incrementa en 1 el contenido de memoria apuntada por p. *p = *p + 1; *p += 1; ++*p; (*p)++; /* Notar el uso de par´ntesis. */ e ¡Cuidado! Los operadores unarios * y ++ asocian de derecha a izquierda, por lo tanto, el uso de par´ntesis suele ser necesario. e El operador ++ aplicado a unpuntero hace que apunte a la celda siguiente. Esto suele ser util al manipular arrays, ya que C nos garantiza ´ que las celdas de un array son contiguas. Ver ejemplo ej2.c. No es util en otros casos, ya que (excepto por el caso del array) una implemen´ taci´n de C puede elegir asignar cual celda corresponde a cual variable o en forma bastante arbitraria. En C el paso de par´metros a funciones espor valor, cuando deseaa mos que una funci´n pueda modificar una variable a elecci´n del del o o llamador debemos usar punteros. Ver Fig. 2. Ver ejemplo ej3.c
llamado b: a: pb: pa:

en swap_v2

Figura 2: Paso de referencias a funciones.

3

Punteros y Arreglos
En C, hay una relaci´n muy fuerte entre punteros y arreglos. Cualquier o operaci´n que pueda ser lograda indexando un arreglo...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Punteros en lenguaje c
  • C sharp Manejo de Punteros
  • PUNTEROS PROGRAMACION EN C
  • Ejemplos De Punteros En C++
  • Punteros En C++
  • Puntero c++
  • Punteros en c++
  • Punteros En C++

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS