17.04.2013 Views

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

Florian Moraru PROGRAMAREA CALCULATOARELOR în limbajul C

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Dacã se declarã un tip pointer cu typedef atunci se poate scrie astfel:<br />

typedef int* intptr; // intptr este nume de tip<br />

intptr p1,p2,p3; // p1, p2, p3 sunt pointeri<br />

Tipul unei variabile pointer este important pentru cã determinã câti octeti vor fi<br />

folositi de la adresa continutã <strong>în</strong> variabila pointer si cum vor fi interpretati. Un pointer<br />

la void nu poate fi utilizat direct, deoarece nu se stie câti octeti trebuie folositi si cum.<br />

Operatii cu pointeri la date<br />

Operatiile posibile cu variabile pointer pot fi rezumate astfel:<br />

- Indirectarea printr-un pointer (diferit de void *), pentru acces la datele adresate de<br />

acel pointer: operatorul unar '*'. Exemple:<br />

*p = y;<br />

x = *p;<br />

*s1++ = *s2++;<br />

- Atribuire la un pointer. In partea dreaptã poate fi un pointer de acelasi tip (eventual<br />

cu conversie de tip) sau constanta NULL sau o expresie cu rezultat pointer. Exemple:<br />

p1=p1;<br />

p=NULL;<br />

p=&x;<br />

p=*pp; p =(int*)malloc(n);<br />

Operatorul unar '&' aplicat unei variabile are ca rezultat adresa variabilei<br />

respective (deci un pointer). Functia "malloc" si alte functii au ca rezultat un pointer de<br />

tip void*.<br />

Unei variabile de tip void* i se poate atribui orice alt tip de pointer fãrã conversie<br />

de tip explicitã si un argument formal de tip void* poate fi <strong>în</strong>locuit cu un argument<br />

efectiv de orice tip pointer.<br />

Atribuirea <strong>în</strong>tre alte tipuri pointer se poate face numai cu conversie de tip explicitã<br />

("cast") si permite interpretarea diferitã a unor date din memorie. De exemplu, putem<br />

extrage cei doi octeti dintr-un <strong>în</strong>treg scurt astfel:<br />

short int n; char c1, c2;<br />

c1= *(char*)&n;<br />

c2= *(char*)(&n+1);<br />

sau:<br />

char * p = (char*) &n;<br />

c1= *p; c2 = *(p+1);

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!