La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Punteros.

Presentaciones similares


Presentación del tema: "Punteros."— Transcripción de la presentación:

1 Punteros

2 Intercambio con error ¿porqué?
#include <stdio.h> void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b); /* llamada */ return 0; } void intercambio(int x, int y){ /* declaración formal */ int temp; temp=x; x=y; y=temp; printf(“ x=%d y=%d\n“,x,y); 1

3 Intercambio con error ¿porqué?
#include <stdio.h> void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b); /* llamada */ return 0; } void intercambio(int x, int y){ /* declaración formal */ int temp; temp=x; x=y; y=temp; printf(“ x=%d y=%d\n“,x,y); Porque se pasan parámetros por valor!! Solución: pasar parámetros por referencia! => usar punteros !! 1

4 Definición y operador &
Puntero es una variable cuyo contenido es la dirección de una variable. (apunta a una variable) Ejemplo: sea p una variable de tipo puntero y c una variable de cualquier tipo: ...... p: c: p = &c; El operador unario & entrega la dirección del objeto que le sucede.

5 Operador * p: c: f: ....... ...... 2 3 *p = 2; f =*p + 1;
El operador unario *, permite el acceso al contenido de la dirección apuntada por la variable puntero que le sucede. Ofrece un nombre alternativo para la variable apuntada. Sean c y f dos variables enteras, sea p una variable puntero que “apunta a c”. p: c: f: ...... 2 3 *p = 2; f =*p + 1; Es lo mismo que: c = 2; f = c + 1;

6 Ejemplo int x = 1, y = 2; int *ip; /* ip es puntero a entero */
ip = &x; /* ip apunta al entero x */ y = *ip; /* y es ahora */ *ip = 0; /* x es ahora */

7 Ejemplo (cont.) int x = 1, y = 2;
int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ y = *ip; /* y es ahora */ *ip = 0; /* x es ahora */ x: y: ...... 1 2 1

8 Ejemplo (cont.) int x = 1, y = 2;
int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ y = *ip; /* y es ahora */ *ip = 0; /* x es ahora */ ip: x: y: ...... ? 1 2 1

9 Ejemplo (cont.) int x = 1, y = 2;
int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ y = *ip; /* y es ahora */ *ip = 0; /* x es ahora */ ip: x: y: ...... 1 2 1

10 Ejemplo (cont.) int x = 1, y = 2;
int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ y = *ip; /* y es ahora */ *ip = 0; /* x es ahora */ El operador unario * es el operador de indirección. ip: x: y: ...... 1 1

11 Ejemplo (fin) int x = 1, y = 2; int *ip; /* ip es puntero a entero */
ip = &x; /* ip apunta al entero x */ y = *ip; /* y es ahora */ *ip = 0; /* x es ahora */ El operador unario * es el operador de indirección. ip: x: y: ...... 1 1

12 Aritmética de punteros
El contenido de un puntero puede ser modificado realizando operaciones aritméticas enteras simples. float *p; / * un float tiene 4 bytes */ p = p + 2; /* p apunta ahora a una variable 2*4 bytes de distancia del la anterior */ p: ...... 1 byte 1 float

13 Aritmética de punteros (ejemplo)
int x = 0, y = 1, z = 2;/* globales */ int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ *ip = *ip + 1; /* x es ahora */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora */

14 Aritmética de punteros (cont.)
int x = 0, y = 1, z = 2;/* globales */ int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ *ip = *ip + 1; /* x es ahora */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora */ x: y: z: ...... 1 2

15 Aritmética de punteros (cont.)
int x = 0, y = 1, z = 2;/* globales */ int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ *ip = *ip + 1; /* x es ahora */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora */ ip: x: y: z: ...... ? 1 2

16 Aritmética de punteros (cont.)
int x = 0, y = 1, z = 2;/* globales */ int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ *ip = *ip + 1; /* x es ahora */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora */ ip: x: y: z: ...... 1 2

17 Aritmética de punteros (cont.)
int x = 0, y = 1, z = 2;/* globales */ int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ *ip = *ip + 1; /* x es ahora */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora */ ip: x: y: z: ...... 1 1 2

18 Aritmética de punteros (cont.)
Int x = 0, y = 1, z = 2;/* globales */ int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ *ip = *ip + 1; /* x es ahora */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora */ ip: x: y: z: ...... 1 2

19 Aritmética de punteros (cont.)
int x = 0, y = 1, z = 2;/* globales */ int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ *ip = *ip + 1; /* x es ahora */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora */ ip: x: y: z: ...... 2 2

20 Aritmética de punteros (cont.)
int x = 0, y = 1, z = 2;/* globales */ int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ *ip = *ip + 1; /* x es ahora */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora */ ip: x: y: z: ...... 2 2

21 Aritmética de punteros (fin)
int x = 0, y = 1, z = 2;/* globales */ int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ *ip = *ip + 1; /* x es ahora */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora */ ip: x: y: z: ...... 2 3

22 Otra imagen de punteros
ip: x: y: z: ...... 2 3

23 Otra imágen de punteros
ip x: y: z: 2 3

24 Intercambio sin error #include <stdio.h>
void intercambio(int *, int *); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(&a,&b); /* llamada */ return 0; } void intercambio(int *x, int *y){ /* declaración formal */ int temp; temp=*x; // *x, *y son nombres alternativos de a y b *x=*y; *y=temp; 1


Descargar ppt "Punteros."

Presentaciones similares


Anuncios Google