![Page 1: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/1.jpg)
Punteros
![Page 2: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/2.jpg)
1
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 */ printf("a=%d b=%d\n",a,b);
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);}
![Page 3: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/3.jpg)
1
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 */ printf("a=%d b=%d\n",a,b);
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 !!
![Page 4: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/4.jpg)
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;
El operador unario & entrega la dirección del objeto que le sucede.
.............
p: c:
![Page 5: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/5.jpg)
Operador *• 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 = 2;
Es lo mismo que: c = 2; f = c + 1;
............. 2
f:
f =*p + 1;
3
c:p:
![Page 6: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/6.jpg)
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 1 */ *ip = 0; /* x es ahora 0 */
![Page 7: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/7.jpg)
1
Ejemplo (cont.)
.............x:
int x = 1, y = 2; int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ y = *ip; /* y es ahora 1 */ *ip = 0; /* x es ahora 0 */
y:
1 2
![Page 8: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/8.jpg)
1
.............
ip: x:
int x = 1, y = 2; int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ y = *ip; /* y es ahora 1 */ *ip = 0; /* x es ahora 0 */
y:
1 2?
Ejemplo (cont.)
![Page 9: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/9.jpg)
1
.............
ip: x:
int x = 1, y = 2; int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ y = *ip; /* y es ahora 1 */ *ip = 0; /* x es ahora 0 */
y:
1 2
Ejemplo (cont.)
![Page 10: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/10.jpg)
.............
ip: x:
El operador unario * es el operador de indirección.
int x = 1, y = 2; int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ y = *ip; /* y es ahora 1 */ *ip = 0; /* x es ahora 0 */
y:
1 1
Ejemplo (cont.)
![Page 11: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/11.jpg)
1
Ejemplo (fin)
El operador unario * es el operador de indirección.
int x = 1, y = 2; int *ip; /* ip es puntero a entero */ ip = &x; /* ip apunta al entero x */ y = *ip; /* y es ahora 1 */ *ip = 0; /* x es ahora 0 */
.............
ip: x: y:
0 1
![Page 12: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/12.jpg)
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
![Page 13: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/13.jpg)
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 1 */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora 2 */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora 3 */
![Page 14: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/14.jpg)
Aritmética de punteros (cont.)
.............x:
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 1 */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora 2 */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora 3 */
y:
0 2
z:
1
![Page 15: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/15.jpg)
.............
ip: x:
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 1 */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora 2 */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora 3 */
y:
0 2
z:
1?
Aritmética de punteros (cont.)
![Page 16: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/16.jpg)
.............
ip: x:
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 1 */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora 2 */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora 3 */
y:
0 2
z:
1
Aritmética de punteros (cont.)
![Page 17: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/17.jpg)
.............
ip: x:
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 1 */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora 2 */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora 3 */
y:
1 2
z:
1
Aritmética de punteros (cont.)
![Page 18: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/18.jpg)
.............
ip: x:
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 1 */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora 2 */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora 3 */
y:
0 2
z:
1
Aritmética de punteros (cont.)
![Page 19: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/19.jpg)
.............
ip: x:
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 1 */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora 2 */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora 3 */
y:
0 2
z:
2
Aritmética de punteros (cont.)
![Page 20: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/20.jpg)
.............
ip: x:
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 1 */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora 2 */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora 3 */
y:
0 2
z:
2
Aritmética de punteros (cont.)
![Page 21: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/21.jpg)
Aritmética de punteros (fin)
.............
ip: x:
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 1 */ ip = ip + 1; /* ip apunta ahora a y */ *ip = *ip + 1; /* y es ahora 2 */ ip = ip + 1; /* ip apunta ahora a z */ *ip = *ip + 1; /* z es ahora 3 */
y:
0 3
z:
2
![Page 22: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/22.jpg)
Otra imagen de punteros
.............
ip: x: y:
0 3
z:
2
![Page 23: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/23.jpg)
Otra imágen de punteros
........................
ip
x: y:
0 3
z:
2
![Page 24: Punteros. 1 Intercambio con error ¿porqué? #include void intercambio(int, int); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(a,b);](https://reader035.vdocuments.co/reader035/viewer/2022062305/5665b47e1a28abb57c91f771/html5/thumbnails/24.jpg)
1
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 */ printf("a=%d b=%d\n",a,b);
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; }