Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Fundamentos de Programacin
Introduccin
Los punteros en C constituyen el tema mas temido por los estudiantes novatos de este lenguaje. Sin embargo, su concepto, como su manipulacin son bastante sencillas. Son extremadamente tiles para trabajos complejos:
Permiten ahorrar espacio en memoria Reservar dinmicamente memoria Paso de parmetros por referencia Entre otros.
Direcciones de Memoria
Al declarar una variable. Por ejemplo: int a; Estamos reservando espacio en memoria (uno o mas bytes) Cada byte tiene una direccin. La direccin es un numero entero, nico para cada byte. Una variable tiene una direccin en memoria.
Es la direccin del primer byte asignado a la misma Es imposible predecir que direccin de memoria va a tener una variable. Pero si es posible, conocer la direccin que ya se ha asignado
El operador & colocado antes del nombre de la variable, retorna la direccin de memoria de la misma.
Direcciones de memoria
int a; printf( La direccion de la variable a es %d , &a);
int x; 1000 pt pt almacena la direccin de x, int *pt; se dice que pt apunta a x char *pt2; pt = &x; Un puntero se denota por el * antes del nombre de la variable. pt podr almacenar la direccin de cualquier entero, es un puntero a entero. A travs de pt podremos acceder a x, pues pt apunta a x. char *pt2 es un puntero a char, puede almacenar direcciones de variables tipo char.
Operador contenido
El objetivo de un puntero es poder manipular la variable a la que apunta. El operador * se conoce como operador de contenido. El operador * ubicado antes de un puntero, representa a la variable a la que este apunta
Ejercicio en clase
int x,y; int *p1,*p2; x = -42; y = 163; p1 = &x; p2 = &y; *p1 = 17; *p2 = x+5; *p1 = *p2; p1 = p2; p1 = NULL; p2 = NULL; 1000 1004 1008 1012 -42 22 17 22 163 1004 1000 0 1004 0 x y p1 p2
Es equivalente a escribir x = y; Esto indica que p1 ahora apunta a la misma variable que p2 Esto es equivalente a encerar el puntero, y decir que no apunta a ninguna variable
Paso de Parmetros
Ya que conocemos de funciones, y sabemos crearlas, podemos crear una funcin que reciba dos valores y los retorne, intercambiados. Podramos decir que el prototipo sera:
void main() {
Al retornar la funcin no efectuara el cambio, como lo deseamos. Recordemos que, al pasar parmetros, se efecta una copia de los valores. Este tipo de paso de parmetros se conoce como PASO DE PARAMETROS POR VALOR.
int x, y; printf( Ingrese x: ); scanf( %d ,&x); printf( Ingrese y: ); scanf( %d ,&y); printf( x = %d, y= %d , x, y); intercambiar(x,y); printf( x = %d, y= %d , x, y); } void intercambiar(int a, int b) { int tmp; tmp = a; a = b; b = tmp; }
4 a 4 3
4 3
Para este tipo de problemas, en los cuales necesitamos modificar directamente los datos que se reciben como parmetros, se usa la llamada de parmetros POR REFERENCIA De esta forma, el prototipo seria:
void main() {
scanf(%d,&x);
printf( Ingrese y: ); scanf( %d ,&y); printf( x = %d, y= %d , x, y); intercambiar(&x,&y); printf( x = %d, y= %d , x, y); } void intercambiar(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; }
main x
4 3
a
3 4
b
Intercambiar tmp
3 4
3 4
Nmeros Pseudoaleatorios
Secuencia pre-establecida de nmeros aleatorios La misma secuencia para cada llamada a la funcin