Академический Документы
Профессиональный Документы
Культура Документы
Objetivo...2
Introduccin3
Conceptos de los apuntadores.4
Apuntadores4
Declaracin de apuntadores4
Los operadores de los apuntadores.5
Un operador de direccin &5
Un operador de indireccin o de desreferencia...5
Inicializacin de apuntadores..6
Apuntadores y funciones.7
Apuntadores y arreglos...7
Arreglos de apuntadores..8
Apuntadores y arreglos multidimensionales...9
Diferentes formas de declarar a[i][j] 11
Argumentos en la lnea de comandos12
Fallas comunes con apuntadores...12
Apuntadores de mayor complejidad..13
Conclusin.15
Bibliografa...16
OBJETIVO
INTRODUCCIN
Un puntero o apuntador es una variable que contiene la direccin de una posicin de
memoria. Esa posicin de memoria es la direccin de comienzo de una variable; la variable
puede ser dinmica.
El uso de estos en C supone, por su proximidad a las direcciones del lenguaje mquina, una
fuente de potencia y flexibilidad.
Son de amplia utilizacin en programacin y muchos lenguajes permiten la manipulacin
directa o indirecta de los mismos.
La principal razn de ser de los punteros es la de manejar datos alojados en la zona de
memoria dinmica o heap, bien sean datos elementales, estructuras (struct en C) u objetos
pertenecientes a una clase, gracias a esta propiedad, los punteros permiten modelar un
grafo, en donde los elementos de ste son los datos residentes en memoria y las relaciones
entre los elementos son los propios apuntadores.
DECLARACIN DE APUNTADORES
Cuando se declara una variable, el compilador reserva un espacio de memoria para ella y
asocia el nombre de sta a la direccin de memoria desde donde comienzan los datos de esa
variable. Las direcciones de memoria se suelen describir como nmeros en hexadecimal.
Un apuntador es una variable cuyo valor es la direccin de memoria de otra variable. Se
dice que un apuntador apunta a la variable cuyo valor se almacena a partir de la direccin
de memoria que contiene el apuntador. Por ejemplo, si un apuntador p almacena la
direccin de una variable x, se dice que p apunta a x.
Los apuntadores como cualquier otra variable deben de ser declarados antes de que puedan
ser utilizados. El tipo de un apuntador lo proporciona implcitamente el tipo de la variable a
la que apunta. Los apuntadores pueden ser declarados para apuntar a objetos de cualquier
clase.
La sintaxis general de declaracin es:
<tipo> * <variable>
Ejemplos de declaraciones:
La variable contPtr es del tipo apuntador a entero, (int *) y se lee ``contPtr es un apuntador
a int'' o ``contPtr apunta a una variable entera''.
4
INICIALIZACIN DE APUNTADORES
< Almacenamiento > < Tipo > * < Nombre > = < Expresin >
Si <Almacenamiento> es extern o static, <Expresin> deber ser una expresin constante
del tipo <Tipo> expresado.
Si <Almacenamiento> es auto, entonces <Expresin> puede ser cualquier expresin del
<Tipo> especificado.
Ejemplos:
La constante entera 0, NULL (cero) proporciona un apuntador nulo a cualquier tipo
de datos:
int *p;
p = NULL; //actualizacin
El nombre de un arreglo de almacenamiento static o extern se transforma segn la
expresin:
a) float mat[12];
float *punt = mat;
b) float mat[12];
float *punt = &mat[0];
Un cast apuntador a apuntador:
int *punt = (int *) 123.456;
Inicializa el apuntador con el entero. Esto es, en la direccin a la que apunta la variable
punt se almacena el valor 123.
Un apuntador a carcter puede inicializarse en la forma:
char *cadena = Esto es una cadena;
Se pueden sumar o restar valores enteros a las direcciones de memoria en la forma:
(aritmtica de APUNTADORES)
static int x;
int *punt = &x+2, *p = &x-1;
Equivalencia: Dos tipos definidos como APUNTADORES a objeto P y apuntador a
objeto son equivalentes slo si P y Q son del mismo tipo. Aplicado a matrices:
nombre_apuntador = nombre_matriz;
6
APUNTADORES Y FUNCIONES
Cuando C pasa argumentos a funciones, los pasa por valor, es decir, si el parmetro es
modificado dentro de la funcin, una vez que termina la funcin el valor pasado de la
variable permanece inalterado.
Hay muchos casos que se quiere alterar el argumento pasado a la funcin y recibir el nuevo
valor una vez que la funcin ha terminado. Para hacer lo anterior se debe usar una llamada
por referencia, en C se puede simular pasando un puntero al argumento. Con esto se
provoca que la computadora pase la direccin del argumento a la funcin.
Para entender mejor lo anterior consideremos la funcin swap() que intercambia el valor de
dos argumentos enteros:
void swap(int *px, int *py);
main()
{
int x, y;
x = 10;
y = 20;
printf("x=%d\ty=%d\n",x,y);
swap(&x, &y);
printf("x=%d\ty=%d\n",x,y);
}
void swap(int *px, int *py)
{
int temp;
temp = *px; /* guarda el valor de la direccin x */
*px = *py; /* pone y en x */
*py = temp; /* pone x en y */
APUNTADORES Y ARREGLOS
Existe una estrecha relacin entre apuntadores y arreglos, tanto que pueden ser usados en
forma casi indistinta. En C, un nombre de un arreglo es un ndice a la direccin de
comienzo del arreglo. En esencia, el nombre de un arreglo es un puntero al arreglo.
Una variable de tipo arreglo puede considerarse como un apuntadora tipo del arreglo.
Los apuntadores pueden ser utilizados en cualquier operacin que involucre subndices de
arreglos.
Ejemplo:
main()
{
int tabla[10],i,x,*pt,*ptr;
pt = &tabla[0];
x = *pt;
for (i=0; i!10; i++)
*(pt+i) = random();
ptr = tabla;
for (i=0; i!10; i++)
printf(''%d nn'',*(ptr+i),tabla[i]);
}
Cuando se suma 1 a un apuntador el incremento se adecua al tamao en memoria del objeto
apuntado.
Un apuntador es una variable, por lo que operaciones como pa = a y pa++ son permitidas.
Un nombre de un arreglo es una constante, no una variable, de ah que a = pa o a++ o p = a.
ARREGLOS DE APUNTADORES
Los arreglos pueden contener apuntadores. El uso ms comn es el de formar arreglos de
cadenas de caracteres. Cada entrada en el arreglo es un apuntador al primer carcter de la
cadena. Sea la declaracin:
char * mensaje[4] = {''Hola'',''Adios'',''Bye'',''Salut''}
Cada cadena est almacenada en memoria como una cadena de caracteres terminada en
NULL n0. En el arreglo no estn colocadas las cadenas, tan solo estn almacenados los
apuntadores. Aunque el arreglo es de tamao fijo, permite el acceso a cadenas de caracteres
de cualquier longitud. En C se pueden tener arreglos de apuntadores ya que los apuntadores
son variables.
A continuacin se muestra un ejemplo de su uso: ordenar las lneas de un texto de diferente
longitud.
Los arreglos de apuntadores son una representacin de datos que manejan de una forma
eficiente y conveniente lneas de texto de longitud variable.
Cmo se puede hacer lo anterior?
Guardar todas las lneas en un arreglo de tipo char grande. Observando que \n marca
el fin de cada lnea. Ver figura 1.1.
Guardar los apuntadores en un arreglo diferente donde cada apuntador apunta al
primer carcter de cada lnea.
Comparar dos lneas usando la funcin de la biblioteca estndar strcmp().
10
11
Ya que el primer elemento del arreglo, (*argv[]) apunta a la cadena que contiene el nombre
del comando, argc es al menos igual a 1.
Esta estructura de datos es creada por el sistema operativo, (Unix u otro), por lo que la
nica preocupacin del programador es usarla, no generarla.
12
Considerar:
*p = (char *) malloc(100): /* pide 100 bytes de la memoria */
*p = 'y';
Existe un error en el cdigo anterior. Cul es?
El * en la primera lnea ya que malloc regresa un apuntador y *p no apunta a ninguna
direccin. El cdigo correcto deber ser:
p = (char *) malloc(100);
Ahora si malloc no puede regresar un bloque de memoria, entonces p es nulo, y por lo tanto
no se podr hacer:
*p = 'y';
Un buen programa en C debe revisar lo anterior, por lo que el cdigo anterior puede ser
reescrito como:
p = (char *) malloc(100): /* pide 100 bytes de la memoria */
if ( p == NULL )
{
printf("Error: fuera de memoria\n");
exit(1);
}
*p = 'y';
p es un apuntador a un entero.
p es un arreglo de 10 apuntadores a enteros.
p es un apuntador a un arreglo de 10 enteros.
p es una funcin que devuelve un apuntador a entero.
p es una funcin que acepta un argumento que es un
apuntador a carcter, devuelve un entero.
p es una funcin que acepta un argumento que es un
apuntador a carcter, devuelve un apuntador a entero.
p es un apuntador a funcin que acepta un argumento que es
un apuntador a carcter, devuelve un apuntador a entero.
p es una funcin que acepta un argumento que es un
apuntador a carcter, devuelve un apuntador a un arreglo de
10 enteros.
p es un apuntador a funcin que acepta un argumento que es
un apuntador a un arreglo de caracteres, devuelve un
apuntador a entero.
p es un apuntador a funcin que acepta un argumento que es
un arreglo de apuntadores a caracteres, devuelve un apuntador
a entero.
p es una funcin que acepta un argumento que es un arreglo
13
14
CONCLUSIN
15
BIBLIOGRAFA
http://html.rincondelvago.com/apuntadores-en-lenguajes-de-programacion.html
16