11.07.2015 Views

LUCRAREA NR. 6 POINTERI

LUCRAREA NR. 6 POINTERI

LUCRAREA NR. 6 POINTERI

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

Utilizarea constantelor şir în locul poinetrilor la caractere este posibilă dar nu este uzuală.Exemplu:# include void main(){char *sir = "To be or not to be", *altsir;printf("%s\n", "That don't impress me much"+5);printf("%c\n",*("12345"+3));printf("%c\n","12345"[1]);puts("string\n");altsir = "American pie";printf("sir = %s\naltsir = %s\n",sir,altsir);}6.2.2. Pointeri şi şiruriDeoarece numele unui tablou fără indici este un pointer la primul element al tabloului, pentruimplementarea unor funcţii care manipulează şiruri, se pot utiliza pointeri. Stim că funcţia strcmp(s1, s2)realizează compararea şirurilor s1 şi s2 şi întoarce 0 dacă s1 = s2, o valoare negativă, dacă s1 < s2 şi ovaloare pozitivă, dacă s1 > s2.Exemplu: Prezentăm o variantă de scriere a funcţiei strcmp(s1,s2)char *s1, *s2;{ while (*s1)if (*s1 - *s2)return *s1-*s2; /* Returneaza diferenta */else {s1++; s2++;}return '\0';} //Se returneaza 0 in caz de egalitateReamintim că un şir în C se termină cu caracterul NULL. De aceea, instructiunea while(*s1)rămâne adevărată până când se întâlneşte caracterul NULL, care este o valoare falsă.Dacă într-o expresie se utilizează un şir constant, calculatorul tratează constanta ca pointer laprimul caracter al şirului.Exemplu: Programul următor afişează pe ecran mesajul " Acest program funcţionează ":# include void main (void) {char *s;s = " Acest program functioneaza ";printf (s); }6.2.3. Preluarea adresei unui element al unui tablouPână acum s-a văzut că un pointer poate să adreseze primul element al unui tablou. Este posibil săse adreseze orice element al unui tablou aplicând operatorul & unui tablou indexat. De exemplu,p = &x[2];plasează adresa celui de-al 3-lea element al vectorului x în pointerul p. Un domeniu în care aceastăpractică este esenţiala constă în găsirea unui subşir într-un şir dat.Exemplu: Programul următor afişează ultima parte a unui şir introdus de la tastatură, din punctul în carese întâlneşte primul spaţiu:# include void main (void) {char s[80];char *p;int i;printf (" Introduceti un sir : \n ");gets (s); /* Gaseste primul spatiu sau sfarsitul sirului */for (i = 0; s[i] && s[i] != ' '; i++)p = & s[i+1];printf (p); }Dacă p indică spre un spaţiu, programul va afişa spaţiul şi apoi subşirul rămas. Dacă în şirulintrodus nu este nici un spaţiu, p indică spre sfârşitul şirului şi atunci nu se va afişa nimic. De exemplu,dacă se introduce “my friend“, atunci printf() afişează mai întâi un spaţiu şi apoi “friend“.6.2.4. Tablouri de pointeriPutem construi tablouri de pointeri în aceeaşi manieră în care se definesc alte tipuri de date.Exemplu:int *x[10]; // Vector de 10 pointeri la intregi5

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

Saved successfully!

Ooh no, something went wrong!