WykładSI2009-11-16.pdf

(59 KB) Pobierz
184405909 UNPDF
Wskaźniki
Wskaźniki są to zmienne przechowujące adres innej zmiennej.
Wskaźniki używane są z dwóch powodów:
1.
Wykład SI
16.11.2009
Niektórych algorytmów nie można zapisać bez użycia wskaźników, zastosowanie wsk, bardzo często
prowadzi do uzyskania bardziej efektywnego kodu
2. Wskaźnik umożliwia pośredni dostęp do wartości zmiennej, której adres zawiera
Operator wyłuskania * - jest zwany także operatorom dostępu pośredniego albo de referencją
*identyfikator_zmiennej;
Operator * znajdujący się przed zmienna oznacza, że zostanie odczytana wartość przechowywana pod adresem
znajdującym się w zmiennej
Operator adresu służy do pozyskiwania adresy zmiennej
&identyfikator_zmiennej;
FLOAT a,b, *p;
a=10.1;
p=&a;
b=*p+1;
printf (“b = %f”, b);
_getch ();
return 0;
Tablice jednowymiarowe:
Typ identyfikator[liczba _elementow]; duble tablica[10];
Tablice można podczas deklaracji zainicjować wartościami
int b[4]= {21,44,72,34};
Identyfikator [num elementu]
Tablica
Element 0
Element 1
Element 2
int b[4]= {21,44,72,34};
printf („%i”, b[2]);
b[3]=15; // zamiast 34 wpisana zostaje 15
&a = 0x1000
A[0][0] = -2,5
&a[0][0] = 0x1000
Tablice dwuwymiarowe:
Typ identyfikator [liczba wierszy] [liczba kolumn];
int b[3][4]= {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
Identyfikator [numer wirsza] [numer kolumny]
int b[3][4]= {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
printf („%i”, b[2][1]);
b[1][1] = 15;
Funkcja malloc
Rezerwuje w pamięci zadana przed użytkownika liczbę bajtów
void*malloc (liczba bajtów );
Zwraca wskaźnik do zarezerwowanego obszaru lub 0 gdy żądanie rezerwacji nie może być spełnione.
Funkcja calloc
Rezerwuje w pamięci dla zadanej przez użytkownika liczby elementów
void *calloc (liczba elementów, rozmiar elementu);
1 | S t r o n a
184405909.002.png
 
Zwraca wskaźnik do zarezerwowanego obszaru lub 0 gdy żądanie rezerwacji nie może być spełnione.
Funkcja free
Zwalnia zarezerwowany Obsza pamięci dzięki czemu może być on wykorzystany do innych celów
void free (wskaźnik do bloku pamięci);
Operator sizeof
Zwalnia liczbę bajtów zajmowanych w pamięci przez zmienną
sizeof (zmienna lub jej typ);
Parametrem funkcji może być również typ zmiennej
Przykład
double *p = 0;
p = (double *)malloc(10); // bł Ę dna alokacja pami Ę ci 10 pozwala na jedn Ą liczb Ę typu double
p = (double *)calloc (10, sizeof (double)); // pozwala na przechowanie 10 liczb typu double
free (p); // pami ĘĆ niepotrzebna wiec zwalniamy
Przykład
float *a=0;
a=(float*)calloc(4, sizeof (float)); // rezerwacja dla 4 elementów typu float
*a = -2,5;
*(a+1) = 3,14;
*(a+2) = 21,9;
*(a+3)= 5,5;
free (a); // zwalniamy pami ĘĆ
Float *a = NULL;
A=(float*)calloc(4, sizeof (float));
A[0] = -2,5;
A[1] = 3,14; …
Tablica dwuwymiarowa
float **adr;
int i;
adr = (float **)calloc (1w, sizeod (float*));
for (i=0; i<1w;++i)
{
*(adr+i)= (float*)calloc (1k,sizeof (float) );
// adr[i]= (float*)calloc (1k,sizeof (float) );
}
*(*(adr+0)+1)=3,14; // adr [0] [1] = 3,14;
for (i=0; i<1w; ++i)
{
free (*(adr+i)) ;
// free (adr [i]); zwalnia wszystkie tablice po kolei
}
free (adr);
//zwolnij od adr
_getch
2 | S t r o n a
184405909.003.png
 
Operator new
Rezerwuje w pamięci dla zadanej przez użytkownika liczby elementów
Zmienna wskaźnikowa = new typ elementy;
Delete identyfikator_zmiennej_wskaźnikowej;
Jeżeli zmienna wskaźnikowa wskazuje na tablicę należy użyć [] (sygnalizują one kompilatorowi ze usuwana jest
tablica )
delete
delete [] identyfikator_zmiennej_wskaźnikowej;
// [] usuwana jest tablica
Rezerwowanie pamięci
identyfikator = New typ elementu [liczba elementow] ;
Przykład
float *p = 0;
p = new float; // p staje si Ę New float
*p = 10.1; // p[0] = 10.1
delete p;
Tablica jednowymiarowa
int n,i;
float *p = 0;
std::cout << „n=”;
std::cin >> n;
p=new float[n];
for (i=0; i<n; ++i) p[i] = 3.14*I;
for (i=0; i<n; ++i) std::cout << p[i] << „\n”;
delete [] p;
_getch();
return 0;
}
Tablica dwuwymiarowa
double **tablica;
int i.n.m;
std::cout << “m=”;
std::cin >> m;
std:: cout << “n=”;
std::cin >> n;
tablica = new double *[m]
for (i=0; i<m; ++i) tablica [i] = New double [n]; // funkcje wykorzystuj Ą ce tablice
for (i=0; i<m; ++i) delete[] tablica [i];
delete [] tablica;
_getch();
return 0;
}
3 | S t r o n a
Delete
Operator delete
Zwalnia zarezerwowany obszar pamięci dzięki czemu może być on wykorzystany do innych celów
Delete
delete
184405909.001.png
 
Zgłoś jeśli naruszono regulamin