Lectura

Páginas: 6 (1396 palabras) Publicado: 20 de junio de 2014
PUNTEROS DOBLES EN C
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)

11 PUNTEROS 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...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Lecturas
  • Lectura
  • La lectura
  • Lectura
  • Lectura
  • Lectura
  • Lecturas
  • Lectura

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS