Professional Documents
Culture Documents
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:
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
Direcciones de memoria
int a;
printf(La direccion de la variable a es %d, &a);
1000
1001
1002
1003
1000
1001
1002
1003
1004
1005
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;
Es equivalente a escribir
x = y;
*p1 = *p2;
p1 = p2;
p1 = NULL;
p2 = NULL;
1000
-42
17
22
1004
22
163
1008
1000
1004
0
p1
1012
1004
0
p2
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:
main
x
a4
3
4
Intercambiar
b
tmp
4
3
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;
}
main
x
3
4
4
3
a
Intercambiar
b
3
4
tmp
3
4
void main()
{
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;
}
Nmeros Pseudoaleatorios
Secuencia pre-establecida de nmeros aleatorios
La misma secuencia para cada llamada a la funcin