TABLOURI DE POINTERI. INITIALIZAREA TABLOURILOR DE POINTERI
Sa presupunem ca avem de scris o functie care sa returneze un sir de caractere cu numele zilei a n-a din saptamana. O functie nu poate intoarce un sir de caractere asa ca este clar ca trebuie sa revina cu un pointer la numele zilei a n-a. Deci, in cadrul functiei tr 939g69j ebuie sa se creeze un sir de nume de zile si un sir de pointeri spre aceste nume. Clasa de memorie pentru acest sir de nume trebuie sa fie static interna, asa fel incat sa nu se distruga la fiecare revenire din functie.
Exemplu 5.9.1
char *nume-zi (int n)
;
if (n > = 1 && n < = 7)
return zi [ n ] ;
else
return zi [ 0 ] ;
}
Exemplu 5.9.2
Un alt exemplu clasic de utilizare de siruri de pointeri este transmiterea matricilor ca parametri ai unei functii. Deoarece accesul la un element al matricei se face prin dubla referinta la linie si coloana, modalitatea de transmitere a matricelor la functii difera de cea de la siruri. In acest caz trebuie transmis un pointer la un sir de pointeri, fiecare element al sirului pointand la liniile matricei.
Mai jos se prezinta programul care inmulteste doua matrice. Catre functia care efectueaza inmultirea se transmit pointeri la siruri de pointeri pentru matricele A [ M ] [ N ] , B [N] [P] respectiv spre matricea rezultat C [ M ] [ P ], de fapt pointeri la pointeri.
# include "stdio.h"
# define M 4
# define N 2
# define P 3
void inm-matr (float **, float **, float **,
unsigned, unsigned, unsigned) ;
main ( )
, , ,
} ;
float b [N] [P] = h
,
} ;
float c [M] [P] ;
for (i = 0 ; i < M ; i++ )
pa[ i ] = a [ i ] ; /* pa [ i ] = adresa liniei i in */
/* matricea a */
for ( i = 0 ; i < N ; i++ )
pb [ i ] = b [ i ] ; /* pb [ i ] = adresa liniei i in */
/* matricea b */
for ( i = 0 ; i < M; i++)
pc [ i ] = c [ i ] ; /* pc [ i ] = adresa liniei i in */
/* matricea c */
ppa = pa ;
ppb = pb ;
ppc = pc ;
inm-matr (ppa, ppb, ppc, M, N, P) ;
printf ("Matricea rezultat = \ n") ;
for ( i = 0 ; i < M ; i++) {
for ( j = o ; j < P ; j++)
|