You are on page 1of 4

ESCUELA POLITCNICA NACIONAL Nombre: Jos Luis Morn Fecha: 05/12/2011 PUNTEROS Los motivos para utilizar los

punteros son: Proporcionar los medios por los cuales las funciones pueden modificar sus argumentos de llamada. Soportar las rutinas de asignacin dinmica de C, como listas enlazadas, rboles, etc. Mejorar la eficiencia de ciertas rutinas, como el uso de arreglos, cadenas, estructuras, etc. VARIABLE PUNTERO Es una variable que almacena una direccin de memoria de otra variable, siendo esta direccin la posicin interna de la variable en la memoria RAM del computador. Es decir, es una variable apuntando a otra, como se muestra en el grafico Direccin De memoria EF00 EF02 Variable de memoria 20 . FEE0 EF00 MEMORIA variable puntero (direccin) variable (valor)

DECLARACION DE LA VARIABLE PUNTERO La forma general para declarar una variable puntero es: tipo*nombre; donde: tipo, es cualquier tipo vlido de C. nombre, es el nombre de la variable puntero. Tipo base del puntero

Define el tipo de variable de la que puede apuntar el puntero, especificndose a la vez el tamao del dato. El tipo base del puntero se define en la declaracin de la variable puntero. El nmero de bytes que utiliza la variable puntero es 2, por ser un tipo entero sin signo representado en hexadecimal, por ejemplo, EF00. Pero en algunos compiladores tiene cuatro bytes, siendo un puntero largo, los dos primeros bytes corresponden al segmento de memoria y los dos restantes, al desplazamiento dentro del segmento, as: 5B5B:EF00. La direccin nula es macro NULL que se encuentra definida en el archivo de cabecera stdio.h, que corresponde al valor en hexadecimal 0000. Tcnicamente, cualquier tipo de puntero puede apuntar a cualquier lugar de la memoria, sin embargo, toda la aritmtica de punteros est hecha en relacin a su tipo base. OPERADORES DE PUNTEROS EL OPERADOR DE DIRECCIN (&) Devuelve la direccin de memoria de su operando que debe ser una variable. Por ejemplo: int*m,cuenta=20; al asignar: m=&cuenta; m recibe la direccin de la variable cuenta. Si cuenta est ubicada en la posicin EF00, entonces m tiene el valor EF00. EL OPERADOR DE INDIRECCIN (*) Devuelve el valor de la variable localizada en la direccin del operando que debe ser un puntero. Por ejemplo: int*m,q,cuenta=20; al asignar: m=&cuenta; q=*m; q recibe el valor (contenido) de la direccin m. Esto es equivalente a realizar la sentencia: q=cuenta; Si cuenta esta ubicada en EF00 con un valor de 20, y q esta ubicada en EF02, entonces tendr el valor de 20. Las variables punteros deben apuntar siempre al tipo base correspondiente, pero puede haber errores si se asigna a un tipo base que no corresponda. OPERACIONES CON PUNTEROS ASIGNACION DE PUNTEROS

Se puede asignar un puntero solamente a una variable puntero Por ejemplo, el siguiente programa imprime la direccin y el valor de la variable x, mediante punteros. #include<stdio.h> void main() { int x=100; int*p1,*p2; p1=&x; /*Se asigna la direccin de x.*/ p2=p1; /*Se asigna el contenido del puntero p1.*/ printf(Direccin de x=%p, Puntero p2=%p\n,&x,p2); printf(Contenido del puntero p2=%d\n,*p2); } La salida de este programa podra ser: Direccin de x=EF00, Puntero p2= EF00 Contenido del puntero p2=100 ARITMETICA DE PUNTEROS Se lleva a cabo de acuerdo al tipo base, tal que apunte a un elemento adecuado del tipo base. La suma. Se puede hacer por medio del operador incremento al puntero. O sea el puntero se incrementa en la longitud del dato al cual apunta. Ejercicio En el siguiente programa imprimir la direccin de las variables x e y, asignar la direccin de y a un puntero para incrementarlo, y luego imprimir la direccin y el contenido del puntero. #include<stdio.h> void main() { float x=100, y=200,*p; p=&y; p++; printf(\nDireccin de x=%p, Direccin de y=%p\n,&x,&y); printf(Direccin del puntero=%p, Contenido del puntero=%.2f\n,p,*p); } La resta. Esta operacin tiene la misma forma que la suma, pero en su lugar se resta. COMPARACIN DE PUNTEROS

Se puede comparar dos punteros mediante los operadores de relacin. Por ejemplo: int *p,*q; se puede hacer la siguiente comparacin: if(p<q) printf(p apunta a menor direccin de memoria que q\n); INICIALIZACIN DE PUNTEROS Se debe inicializar el puntero a un valor conocido antes de usarlo. Por convenio, cuando se inicializa un puntero se debe asignarle el valor NULL, para indicar que no apunta a una direccin de memoria especfica. Por otro lado, es comn inicializar las cadenas con un valor conocido. Por ejemplo: char*p= Hola que tal; Tabla de cadenas constantes. Es creada por todos los compiladores de C, que usa internamente el compilador para guardar las constantes cadena utilizadas para el programa. INDIRECCIN MLTIPLE (PUNTERO A PUNTERO) 1. Indireccin simple. El valor de un puntero normal es la direccin de la variable que contiene el valor deseado. 2. Indireccin multiple. El primer puntero contiene la direccin del segundo puntero, que apunta a su vez a la variable que contiene el valor deseado.

You might also like