Lectura
XIII CUIEET – MASPALOMAS
Sidonio Pérez Matilla
EUITI de Eibar
UPV
PUNTEROS DOBLES EN C
•
•
•
•
•
INTRODUCCIÓN.
DEFINICIONES DE PUNTERO y PUNTERO DOBLE.
MAPA DE MEMORIA DE UN PROGRAMA CON PUNTEROS.
FUNCIONES DE USUARIO Y PUNTEROS.
EJEMPLO 1.
–
–
–
CÓDIGO FUENTE.
RESULTADOS.
MAPA DE MEMORIA.
• EJEMPLO 2.
– RESULTADOS.
XIII CUIEET SEP 05Sidonio Pérez: EUITI Eibar (UPV)
2
PUNTEROS DOBLES EN C
INTRODUCCIÓN
Un ejemplo sencillo de un concepto del
lenguaje C difícil de entender:
LOS PUNTEROS DOBLES
XIII CUIEET SEP 05
Sidonio Pérez: EUITI Eibar (UPV)
3
PUNTEROS DOBLES EN C
DEFINICIÓN DE PUNTERO
Variable cuyos posibles valores son
direcciones de otras variables.
DEFINICIÓN DE PUNTERO DOBLE
Variable cuyosposibles valores son
direcciones de otras variables puntero.
int x=5, y[50], *p1=&y[0], **p2=&p1;
XIII CUIEET SEP 05
Sidonio Pérez: EUITI Eibar (UPV)
4
PUNTEROS DOBLES EN C
MAPA DE MEMORIA DE UN PROGRAMA CON
PUNTEROS
Una tabla donde se relacionan
identificadores, direcciones y contenidos
int x=5, y[50], *p1=&y[0], **p2=&p1;
XIII CUIEET SEP 05
Sidonio Pérez: EUITI Eibar (UPV)5
PUNTEROS DOBLES EN C
DIRECCION
CONTENIDO
IDENTIFICADOR
...
…
…
5
x
65000
65002
...
Y[0]
...
65100
65102
...
Y[49]
65002
p1
65102
p2
…
...
…
XIII CUIEET SEP 05
Sidonio Pérez: EUITI Eibar (UPV)
65104
6
PUNTEROS DOBLES EN C
FUNCIONES DE USUARIO Y PUNTEROS
Las funciones de usuario pueden usar punteros:
– En elvalor devuelto; en los PF; en variables locales o globales:
int *f1(int *A, int B, int C)
// interface
{
int *p1, …;
Analiza una tabla de enteros de
…
BxC siendo A su dirección de
comienzo y devuelve la dirección
return (p1);
del máximo.
}
XIII CUIEET SEP 05
Sidonio Pérez: EUITI Eibar (UPV)
7
PUNTEROS DOBLES EN C
FUNCIONES DE USUARIO Y PUNTEROS
Las funciones que devuelvenvarios valores usan PF por referencia para
“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
{
int *p1, *p2, f, c, acu;
Analiza una tabla de
…
enteros de BxC siendo A
*D = *p1;
// un int su dirección de comienzo y
*E = *p2;
// un int devuelve el Vmed, y el
return ((float)acu/B*C);
// un floatmáximo y mínimo a través
}
de D y E.
XIII CUIEET SEP 05
Sidonio Pérez: EUITI Eibar (UPV)
8
PUNTEROS DOBLES EN C
FUNCIONES DE USUARIO Y PUNTEROS
Cuando una función de usuario ha de devolver direcciones a través de
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
{
Analiza una tabla de
int *p1, …;
enterosde BxC siendo A su
…
dirección de comienzo y
*D = expresión;
// una dirección
devuelve la dirección del
return (p1);
máximo, y también la
}
dirección del mínimo a
través de D.
XIII CUIEET SEP 05
Sidonio Pérez: EUITI Eibar (UPV)
9
PUNTEROS DOBLES EN C
EJEMPLO 1
Escribir un programa en C que intercambie
entre sí las vocales primeras y últimas de
dos cadenas.
Hola, Adios--> HAlo, odias
XIII CUIEET SEP 05
Sidonio Pérez: EUITI Eibar (UPV)
10
PUNTEROS DOBLES EN C
CÓDIGO FUENTE DEL EJEMPLO 1
#include
#include
int main()
{
/* ...... PARTE DECLARATIVA ...... */
char s1[80], s2[80], *p11, *p12, *p21, *p22;
char *f1(char *, char **);
// prototipo
void f2(char *, char *);
// prototipo
XIII CUIEET SEP 05
Sidonio Pérez: EUITI Eibar (UPV)
11PUNTEROS DOBLES EN C
CÓDIGO FUENTE DEL EJEMPLO 1
/* ...... PARTE EJECUTIVA ...... */
clrscr();
// limpia pantalla usuario
// 1: Leer dos cadenas desde el teclado:
printf("\n\tTeclea una cadena: ");
gets(s1);
printf("\n\tTeclea otra cadena: ");
gets(s2);
XIII CUIEET SEP 05
Sidonio Pérez: EUITI Eibar (UPV)
12
PUNTEROS DOBLES EN C
CÓDIGO FUENTE DEL EJEMPLO 1
// 2: visualizar...
Regístrate para leer el documento completo.