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.

- Compararea sau scãderea a douã variabile pointer de acelasi tip (de obicei adrese de<br />

elemente dintr-un acelasi vector). Exemplu:<br />

// pozitia (indicele) in sirul s1 a sirului s2<br />

// sau un numar negativ daca s1 nu contine pe s2<br />

int pos ( char* s1, char * s2) {<br />

char * p1 =strstr(s1,s2); // adresa lui s2 in s1<br />

if (p1)<br />

return p1-s1;<br />

else<br />

return -1;<br />

}<br />

- Adunarea sau scãderea unui <strong>în</strong>treg la (din) un pointer, incrementarea si<br />

decrementarea unui pointer. Exemplu:<br />

// afisarea unui vector<br />

void printVector ( int a [], int n) {<br />

while (n--)<br />

printf (“%d “, *a++);<br />

}<br />

Trebuie observat cã incrementarea unui pointer si adunarea unui <strong>în</strong>treg la un<br />

pointer nu adunã <strong>în</strong>totdeauna <strong>în</strong>tregul 1 la adresa continutã <strong>în</strong> pointer; valoarea<br />

adaugatã (scãzutã) depinde de tipul variabilei pointer si este egalã cu produsul dintre<br />

constantã si numãrul de octeti ocupat de tipul adresat de pointer. Expresiile urmãtoare<br />

sunt echivalente:<br />

p = p+ c; p = p+c*sizeof(tip); // tip * p ;<br />

++p; p=p+sizeof(tip); // tip * p ;<br />

Aceastã conventie permite referirea simplã la elemente succesive dintr-un vector<br />

folosind indirectarea printr-o variabilã pointer.<br />

Operatorul unar sizeof aplicat unui nume de tip sau unei variabile are ca rezultat<br />

numãrul de octeti alocati pentru tipul sau pentru variabila respectivã:<br />

char c; float f;<br />

sizeof(char)= sizeof c = 1<br />

sizeof(float) = sizeof f = 4<br />

Operatorul sizeof permite scrierea unor programe portabile, care nu depind de<br />

lungimea pe care se reprezintã <strong>în</strong> memorie fiecare tip de date. De exemplu, tipul int<br />

ocupã uneori 2 octeti iar alteori 4 octeti.<br />

O eroare frecventã este utilizarea unei variabile pointer care nu a primit o valoare<br />

(adicã o adresã de memorie) prin atribuire sau prin initializare la declarare. Efectul<br />

este accesul la o adresã de memorie imprevizibilã, chiar <strong>în</strong> afara spatiului de memorie<br />

ocupat de programul ce contine eroarea. Exemplu:

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

Saved successfully!

Ooh no, something went wrong!