Professional Documents
Culture Documents
char* strdup(char* s)
{
char *p;
p=(char*)malloc(strlen(s)+1);
if(p)
strcpy(p, s);
return p;
}
Exemplul 3
int main()
{
//tabel de pointeri alocat static
char *tp[N];
int lg=0; //numar de linii
char linie[80];
while(gets(linie))
tp[lg++]=strdup(linie);
afisare(tp, lg);
return 0;
}
Pointeri la funcţii
Numele unei funcţii reprezintă adresa de memorie la care
începe funcţia. Numele functiei este un pointer la funcţie.
Ca şi variabilele, pointerii la functii:
• pot primi ca valori funcţii;
• pot fi transmişi ca parametrii altor funcţii
• pot fi intorşi ca rezultate de către funcţii
La declararea unui pointer către o funcţie trebuiesc
precizate toate informaţiile despre funcţie, adică:
• tipul funcţiei
• numărul de parametri
• tipul parametrilor
tip (*pf)(listă_parametri_formali);
Pointeri la funcţii
Apelul unei funcţii prin intermediul unui pointer are forma:
• (*pf)(listă_parametri_actuali);
sau mai simplu, fără indirectare:
• pf(listă_parametri_actuali);
De exemplu, iniţializarea unui tablou cu pointeri cu funcţiile
matematice uzuale se face prin:
• double (*tabfun[])(double) = {sin, cos,
tan, exp, log};
Pentru a calcula rădăcina de ordinul 5 din e este suficientă
atribuirea:
• y = (*tabfun[3])(0.2);
În acest mod putem transmite în lista de parametri a unei
funcţii – numele altei funcţii
Exemplu: calculul unei integrale definite.
b
I f(x) dx
a
f(a) f( b) n 1 ba
b
a f ( x ) dx h
2
i 1
f (a ih )
cu h
n
int (* a[10]) ( );
• tablou de 10
• pointeri la
• funcţii ce returnează int
double (*(*pf)())[3][4];
• pointer la
• o funcţie ce returnează un pointer
• la un tablou cu 3 linii si 4 coloane de
double
Declaratii complexe.