FUNCIONES QUE DEVUELVEN APUNTADORES

El concepto básico de un puntero doble es el de un identificador de programa cuyo ... cprintf(“%u”,ppENT) --> muestra 60200 .... void AsignarValor ( double* p. ).
318KB Größe 7 Downloads 79 vistas
Asignatura: TALLER DE LENGUAJES 2015 Carrera: PROGRAMADOR UNIVERSITARIO / Lic. EN INFORMATICA Dictado: Ing Juan Manuel Conti. PUNTEROS DOBLES. El concepto básico de un puntero doble es el de un identificador de programa cuyo contenido es una dirección donde a su vez se halla almacenada otra dirección:

60200 ppENT

60200

60500

60500

1525

pENT

Analizar las siguientes notaciones:

cprintf(“%u”,ppENT) --> muestra 60200 cprintf(“%u”,*ppENT) --> muestra 60500 cprintf(“%d”,**ppENT) --> muestra 1525 O sea que la primera indirección referencia la dirección donde se halla el dato en sí, y la segunda el dato en sí: 1525. El lector se preguntará para qué esta sintaxis algo extraña. Ahora viene su utilidad.

Arreglos bidimensionales en memoria dinámica. Si el contenido en sí de ppENT es la dirección donde se halla otro apuntador, bien podría ser un arreglo de apuntadores en lugar de uno sólo:

DIM2

int ** int *

M

DIM1

int *

MEMORIA DINAMICA

Anteriormente habíamos creado una matriz semidinámica utilizando un arreglo estático de apuntadores, y recién a partir de allí entrábamos en la zona dinámica para hacer las reservas de DIM2 domicilios para cada elemento del arreglo de apuntadores.

Taller de Lenguajes I – Clase Teórica Nº4

Nº1 Pág 1/12

Asignatura: TALLER DE LENGUAJES 2015 Carrera: PROGRAMADOR UNIVERSITARIO / Lic. EN INFORMATICA Dictado: Ing Juan Manuel Conti. Los códigos necesarios para generar una matriz a partir de un puntero doble, son los siguientes: const DIM1 = 7; const DIM2 = 8; void main( ) { int **M; int i,j; clrscr( ); highvideo( ); randomize( ); // --- Genera y asigna la matriz dinámica ------------------------M = (int **)ReservarMemoria(DIM1*sizeof(int *)); for(i=0;i