Extras din laborator
Programul şi datele sale sunt păstrate în memoria calculatorului (RAM – Random
Acces Memory – memorie cu acces aleator). Memoria este împărţită în octeţi (opt biţi).
Doi octeţi formează un cuvânt, patru octeţi formează un cuvânt lung, iar 16 octeţi
formează un paragraf (pe IBM PC). Fiecare octet are în memorie o adresă unică, octeţi
consecutivi având adrese consecutive.
Un pointer este o variabilă care păstrează adresa unei date, în loc de a memora
data însăşi.
Prin utilizarea pointerilor, limbajul C oferă utilizatorilor multiple facilităţi, dintre
care mai importante sunt:
- accesarea directă a diverselor zone de memorie prin modificarea adresei
memorate în pointer; în acest fel pot fi create şi exploatate liste înlănţuite.
- crearea de noi variabile în timpul execuţiei programului, în cadrul
mecanismului de alocare dinamică a memoriei;
- întoarcerea dintr-o funcţie a mai multor valori către funcţia apelantă; în mod
uzual, o funcţia întoarce o singură valoare prin intermediul instrucţiunii return;
- accesarea directă unor elemente dintr-o structură de date cum ar fi şiruri sau
tablouri.
1. Declararea şi utilizarea pointerilor
Ca orice tip de variabilă, înainte de a fi utilizată, variabila de tip pointer trebuie
declarată. Declararea se face în cadrul unei instrucţiuni având forma generală:
Tip *nume_pointer 1, .., *nume_pointer n;
unde: tip poate fi oricare dintre tipurile fundamentale de date (int, float, double, char),
nume_pointer i un şir de caractere cu condiţia ca primul caracter să fie o literă
(aceeaşi condiţie ca la numele de variabile).
Singura deosebire faţă de o instrucţiune de declarare de variabile este prezenţa
caracterului *, care semnalează compilatorului că a fost declarată o variabilă pointer şi nu
o variabilă obişnuită.
Pentru a explica modul de lucru cu pointeri, considerăm exemplele următoare:
Exemplul 1.
main()
{
int varint, *ptrint;
ptrint = &varint;
varint = 200;
printf(“adresa varint: %pn”, &varint);
printf(“valoare varint: %dn”, varint);
printf(“valoare ptrint: %pn”, ptrint);
printf(“valoare adresată de ptrint: %dn”,*ptrint);
2
}
În exemplul 1. sunt declarate două variabile, varint şi ptrint. Prima este o variabilă
de tip întreg, care păstrează o valoare de tip int. A doua este o variabilă de tip pointer la o
variabilă întreagă, ea memorând adresa unei variabile de tip int. Operatorul * este numit
în limbajul C operator de indirectare.
Adresa lui varint este atribuită lui ptrint, iar valoarea întreagă 200 este atribuită lui
varint.
Rezultatul execuţiei programului este:
adresa varint: FFD4
valoare varint: 200
valoare ptrint: FFD4
valoare adresată de ptrint: 200
Primele două linii dau adresa şi conţinutul lui varint. A treia linie reprezintă conţinutul lui
ptrint (adresa lui varint), respectiv adresa de memorie în care programul a creat varint.
Această valoare poate diferi de la execuţie la execuţie. Ultima linie afişează valoarea
memorată la adresa respectivă.
Instrucţiunea
varint = 200;
este echivalentă cu
*ptrint = 200;
întrucât varint şi *ptrint se referă la aceeaşi locaţie de memorie.
Exemplul 2.
#include <stdio.h>
void main(void)
{
float a
Preview document
Conținut arhivă zip
- SDA - Laboratoare
- lucrarea 0.pdf
- lucrarea1.pdf
- lucrarea2.pdf
- lucrarea3.pdf