PDF de programación - Punteros dobles en C

Imágen de pdf Punteros dobles en C

Punteros dobles en Cgráfica de visualizaciones

Publicado el 12 de Marzo del 2020
620 visualizaciones desde el 12 de Marzo del 2020
181,8 KB
34 paginas
Creado hace 18a (11/10/2005)
PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

XIII CUIEET – MASPALOMAS
XIII CUIEET – MASPALOMAS

Sidonio Pérez Matilla
Sidonio Pérez Matilla

EUITI de Eibar
EUITI de Eibar

UPVUPV

PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

• INTRODUCCIÓN.
INTRODUCCIÓN.
• DEFINICIONES DE PUNTERO y PUNTERO DOBLE.
DEFINICIONES DE PUNTERO y PUNTERO DOBLE.
• MAPA DE MEMORIA DE UN PROGRAMA CON PUNTEROS.
MAPA DE MEMORIA DE UN PROGRAMA CON PUNTEROS.
• FUNCIONES DE USUARIO Y PUNTEROS.
FUNCIONES DE USUARIO Y PUNTEROS.
• EJEMPLO 1.
EJEMPLO 1.
– CÓDIGO FUENTE.
CÓDIGO FUENTE.
– RESULTADOS.
RESULTADOS.
– MAPA DE MEMORIA.
MAPA DE MEMORIA.
• EJEMPLO 2.
EJEMPLO 2.
– RESULTADOS.
RESULTADOS.

XIII CUIEET SEP 05
XIII CUIEET SEP 05

Sidonio Pérez: EUITI Eibar (UPV)
Sidonio Pérez: EUITI Eibar (UPV)

22

PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

INTRODUCCIÓN
INTRODUCCIÓN

Un ejemplo sencillo de un concepto del
Un ejemplo sencillo de un concepto del
lenguaje C difícil de entender:
lenguaje C difícil de entender:

LOS PUNTEROS DOBLES
LOS PUNTEROS DOBLES

XIII CUIEET SEP 05
XIII CUIEET SEP 05

Sidonio Pérez: EUITI Eibar (UPV)
Sidonio Pérez: EUITI Eibar (UPV)

33

PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

DEFINICIÓN DE PUNTERO
DEFINICIÓN DE PUNTERO

Variable cuyos posibles valores son
Variable cuyos posibles valores son
direcciones de otras variables.
direcciones de otras variables.

DEFINICIÓN DE PUNTERO DOBLE
DEFINICIÓN DE PUNTERO DOBLE

Variable cuyos posibles valores son
Variable cuyos posibles valores son
direcciones de otras variables puntero.
direcciones de otras variables puntero.

int x=5, y[50], *p1=&y[0], **p2=&p1;
int x=5, y[50], *p1=&y[0], **p2=&p1;

XIII CUIEET SEP 05
XIII CUIEET SEP 05

Sidonio Pérez: EUITI Eibar (UPV)
Sidonio Pérez: EUITI Eibar (UPV)

44

PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

MAPA DE MEMORIA DE UN PROGRAMA CON
MAPA DE MEMORIA DE UN PROGRAMA CON
PUNTEROS
PUNTEROS

Una tabla donde se relacionan
Una tabla donde se relacionan

identificadores, direcciones y contenidos
identificadores, direcciones y contenidos

int x=5, y[50], *p1=&y[0], **p2=&p1;
int x=5, y[50], *p1=&y[0], **p2=&p1;

XIII CUIEET SEP 05
XIII CUIEET SEP 05

Sidonio Pérez: EUITI Eibar (UPV)
Sidonio Pérez: EUITI Eibar (UPV)

55

PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

DIRECCION
DIRECCION

CONTENIDO
CONTENIDO

IDENTIFICADOR
IDENTIFICADOR

......
65000
65000

65002
65002

......

65100
65100

65102
65102

65104
65104

……

……

55

......

65002
65002

65102
65102

......

……

xx

Y[0]Y[0]

......

Y[49]
Y[49]

p1p1

p2p2

……

XIII CUIEET SEP 05
XIII CUIEET SEP 05

Sidonio Pérez: EUITI Eibar (UPV)
Sidonio Pérez: EUITI Eibar (UPV)

66

PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

FUNCIONES DE USUARIO Y PUNTEROS
FUNCIONES DE USUARIO Y PUNTEROS

Las funciones de usuario pueden usar punteros:
Las funciones de usuario pueden usar punteros:

– En el valor devuelto; en los PF; en variables locales o globales:
En el valor devuelto; en los PF; en variables locales o globales:

int *f1(int *A, int B, int C)
int *f1(int *A, int B, int C)
{{

int *p1, …;
int *p1, …;
……
return (p1);
return (p1);

}}

// interface
// interface

Analiza una tabla de enteros de
Analiza una tabla de enteros de
BxC siendo A su dirección de
BxC siendo A su dirección de
comienzo y devuelve la dirección
comienzo y devuelve la dirección
del máximo.
del máximo.

XIII CUIEET SEP 05
XIII CUIEET SEP 05

Sidonio Pérez: EUITI Eibar (UPV)
Sidonio Pérez: EUITI Eibar (UPV)

77

PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

FUNCIONES DE USUARIO Y PUNTEROS
FUNCIONES DE USUARIO Y PUNTEROS

Las funciones que devuelven varios valores usan PF por referencia para
Las funciones que devuelven varios valores usan PF por referencia para
“ “devolver” los resultados que no pueden ser devueltos con un return:
devolver” los resultados que no pueden ser devueltos con un return:

float f2(int *A, int B, int C, int *D, int *E) // D y E: dir de var int
float f2(int *A, int B, int C, int *D, int *E) // D y E: dir de var int
{{

int *p1, *p2, f, c, acu;
int *p1, *p2, f, c, acu;
……
*D = *p1;
*D = *p1;
*E = *p2;
*E = *p2;
return ((float)acu/B*C);
return ((float)acu/B*C);

}}

// un int
// un int
// un int
// un int
// un float
// un float

Analiza una tabla de
Analiza una tabla de
enteros de BxC siendo A
enteros de BxC siendo A
su dirección de comienzo y
su dirección de comienzo y
devuelve el Vmed, y el
devuelve el Vmed, y el
máximo y mínimo a través
máximo y mínimo a través
de D y E.
de D y E.

XIII CUIEET SEP 05
XIII CUIEET SEP 05

Sidonio Pérez: EUITI Eibar (UPV)
Sidonio Pérez: EUITI Eibar (UPV)

88

PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

FUNCIONES DE USUARIO Y PUNTEROS
FUNCIONES DE USUARIO Y PUNTEROS

Cuando una función de usuario ha de devolver direcciones a través de
Cuando una función de usuario ha de devolver direcciones a través de
PF pasados por referencia estos se definen como punteros dobles:
PF pasados por referencia estos se definen como punteros dobles:

int *f3(int *A, int B, int C, int **D) // D: dir de una var *int
int *f3(int *A, int B, int C, int **D) // D: dir de una var *int
{{

Analiza una tabla de
Analiza una tabla de
enteros de BxC siendo A su
enteros de BxC siendo A su
dirección de comienzo y
dirección de comienzo y
devuelve la dirección del
devuelve la dirección del
máximo, y también la
máximo, y también la
dirección del mínimo a
dirección del mínimo a
través de D.
través de D.

int *p1, …;
int *p1, …;
……
*D = expresión;
*D = expresión;
return (p1);
return (p1);

}}

// una dirección
// una dirección

XIII CUIEET SEP 05
XIII CUIEET SEP 05

Sidonio Pérez: EUITI Eibar (UPV)
Sidonio Pérez: EUITI Eibar (UPV)

99

PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

EJEMPLO 1
EJEMPLO 1

Escribir un programa en C que intercambie
Escribir un programa en C que intercambie
entre sí las vocales primeras y últimas de
entre sí las vocales primeras y últimas de
dos cadenas.
dos cadenas.

Hola, Adios --> HAlo, odias
Hola, Adios --> HAlo, odias

XIII CUIEET SEP 05
XIII CUIEET SEP 05

Sidonio Pérez: EUITI Eibar (UPV)
Sidonio Pérez: EUITI Eibar (UPV)

1010

PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

CÓDIGO FUENTE DEL EJEMPLO 1
CÓDIGO FUENTE DEL EJEMPLO 1

#include <stdio.h>
#include <stdio.h>
#include <conio.h>
#include <conio.h>
int main()
int main()
{{

/* ...... PARTE DECLARATIVA ...... */
/* ...... PARTE DECLARATIVA ...... */
char s1[80], s2[80], *p11, *p12, *p21, *p22;
char s1[80], s2[80], *p11, *p12, *p21, *p22;
char *f1(char *, char **);
char *f1(char *, char **);
void f2(char *, char *);
void f2(char *, char *);

// prototipo
// prototipo
// prototipo
// prototipo

XIII CUIEET SEP 05
XIII CUIEET SEP 05

Sidonio Pérez: EUITI Eibar (UPV)
Sidonio Pérez: EUITI Eibar (UPV)

1111

PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

CÓDIGO FUENTE DEL EJEMPLO 1
CÓDIGO FUENTE DEL EJEMPLO 1

/* ...... PARTE EJECUTIVA ...... */
/* ...... PARTE EJECUTIVA ...... */
clrscr();
clrscr();

// limpia pantalla usuario
// limpia pantalla usuario

// 1: Leer dos cadenas desde el teclado:
// 1: Leer dos cadenas desde el teclado:
printf("\n\tTeclea una cadena: ");
printf("\n\tTeclea una cadena: ");
printf("\n\tTeclea otra cadena: ");
printf("\n\tTeclea otra cadena: ");

gets(s1);
gets(s1);
gets(s2);
gets(s2);

XIII CUIEET SEP 05
XIII CUIEET SEP 05

Sidonio Pérez: EUITI Eibar (UPV)
Sidonio Pérez: EUITI Eibar (UPV)

1212

PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

CÓDIGO FUENTE DEL EJEMPLO 1
CÓDIGO FUENTE DEL EJEMPLO 1

// 2: visualizar las cadenas tecleadas:
// 2: visualizar las cadenas tecleadas:
puts("\n\n\tCadenas iniciales: ”);
puts("\n\n\tCadenas iniciales: ”);
printf(“\ts1: %s \n\ts2: %s", s1, s2);
printf(“\ts1: %s \n\ts2: %s", s1, s2);

XIII CUIEET SEP 05
XIII CUIEET SEP 05

Sidonio Pérez: EUITI Eibar (UPV)
Sidonio Pérez: EUITI Eibar (UPV)

1313

PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

CÓDIGO FUENTE DEL EJEMPLO 1
CÓDIGO FUENTE DEL EJEMPLO 1

// 3: Buscar direcciones de las vocales
// 3: Buscar direcciones de las vocales
primera y última de cada cadena:
primera y última de cada cadena:
p11 = f1(s1, &p12);
p11 = f1(s1, &p12);
p21 = f1(s2, &p22);
p21 = f1(s2, &p22);

// llamada función
// llamada función
// llamada función
// llamada función

XIII CUIEET SEP 05
XIII CUIEET SEP 05

Sidonio Pérez: EUITI Eibar (UPV)
Sidonio Pérez: EUITI Eibar (UPV)

1414

PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

CÓDIGO FUENTE DEL EJEMPLO 1
CÓDIGO FUENTE DEL EJEMPLO 1

// 4: Intercambiar primeras vocales s1-s2:
// 4: Intercambiar primeras vocales s1-s2:
f2(p11, p21);
f2(p11, p21);

// llamada a función
// llamada a función

// 5: Intercambiar últimas vocales s1-s2:
// 5: Intercambiar últimas vocales s1-s2:
f2(p12, p22);
f2(p12, p22);

// llamada a función
// llamada a función

XIII CUIEET SEP 05
XIII CUIEET SEP 05

Sidonio Pérez: EUITI Eibar (UPV)
Sidonio Pérez: EUITI Eibar (UPV)

1515

PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

CÓDIGO FUENTE DEL EJEMPLO 1
CÓDIGO FUENTE DEL EJEMPLO 1

// 6: visualizar las cadenas tratadas:
// 6: visualizar las cadenas tratadas:
puts("\n\n\tCadenas finales: “);
puts("\n\n\tCadenas finales: “);
printf(“\ts1: %s \n\ts2: %s", s1, s2);
printf(“\ts1: %s \n\ts2: %s", s1, s2);

XIII CUIEET SEP 05
XIII CUIEET SEP 05

Sidonio Pérez: EUITI Eibar (UPV)
Sidonio Pérez: EUITI Eibar (UPV)

1616

PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

CÓDIGO FUENTE DEL EJEMPLO 1
CÓDIGO FUENTE DEL EJEMPLO 1

printf("\n\tPulsa tecla para terminar ... ");
printf("\n\tPulsa tecla para terminar ... ");
getch();
getch();
return 0;
return 0;

// pantalla usuario
// pantalla usuario

}}

// del main()
// del main()

XIII CUIEET SEP 05
XIII CUIEET SEP 05

Sidonio Pérez: EUITI Eibar (UPV)
Sidonio Pérez: EUITI Eibar (UPV)

1717

PUNTEROS DOBLES EN C
PUNTEROS DOBLES EN C

CÓDIGO FUENTE DEL EJEMPLO 1
CÓDIGO FUENTE DEL EJEMPLO 1
/*---------------------------------------------------------------------
/*-----------------------------------------------------------------
  • Links de descarga
http://lwp-l.com/pdf17383

Comentarios de: Punteros dobles en C (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad