39001

39001



123


WSKAŹNIKI NA FUNKCJE

Można także zastosować bardziej oszczędny sposób alokowania tablicy wielowymiarowej, a mianowicie:

sdefine ROZMIAR 10

int i;

int **tabliczka ■ malloc(ROZMIAR * sizeof ‘tabliczka);

•tabliczka - malloc(ROZMIAR * ROZMIAR * sizeof “tabliczka); for (i - 1; KROZMIAR; “i) {

tabliczka[i] ■ tabliczka[0] ♦ (i • ROZMIAR);

>

for (i = 0; i<R0ZMIAR; “i) { int j;

for (j - 0; j<R0ZMIAR; “j) { tabliczkafi] [j] » (i+l)*(j+l);

>

>

free(‘tabliczka); free(tabliczka);

Powyższy kiwi działa w ten sposób, że zamiast dla poszczególnych wierszy alokować osobno pamięć alokuje pamięć dla wszystkich elementów tablicy i dopiero później przypisuje wskazania poszczególnych wskaż ni ków- wi erszy na kolejne bloki po ROZMIAR elementów.

Sposób ten jest bardziej oszczędny z dwóch powodów: Po pierwsze wykonywanych jest mniej o|>eracji przydzielania |xamięci (bo tylko dwie). Po drugie za każdym razem, gdy alokuje się pamięć trochę miejsca się marnuje, gdyż funkcja malloc musi w stogu przechowywać różne dodatkowe informacje na temat każdej zaalokowanej przestrzeni. Ponadto, czasami ak>kacja odbywa się blokami i gdy zażąda się niepełny blok to reszta bloku jest tracona.

Zauważmy, że w ten sposób możemy uzyskać nie tylko normalną, “kwadratową” tablicę (dla dwóch wymiarów). Możliwe jest np. uzyskanie tablicy trójkątnej:

0123

012

01

0

lub tablicy o dowolnym innym rozkładzie <11 ugości wierszy, np.:

const size_t wymiary[] - {2, 4, 6, 8, 1, 3, 5, 7, 9); int i;

int “tablica = malloc((sizeof wymiary / sizeof ‘wymiary) » sizeof ‘tablica); for (i = 0; i<10; ++i) {

tablica[i] » malloc(wymiary[i] * sizeof “tablica);

>

Gdy nabierzesz wprawy w używaniu wskaźników oraz innych funkcji malloc i realloc nauczysz się wykonywać różne inne o|>eracje takie jak do<lawanie kok*jnych wierszy, usuwanie wierszy, zmiana rozmiaru wierszy, zamiana wierszy miejscami it p.

Wskaźniki na funkcje

Dotychczas zajmowaliśmy się sytuacją, gdy wskaźnik wskazywał na jakąś zmienną. Jednak nie tylko zmienna ma swój adres w pamięci. Oprócz zmiennej także i funkcja musi mieć swoje



Wyszukiwarka

Podobne podstrony:
WSP J POLN254138 Kaiegone gramatyczne współczesnej polszczyzny 459 względu na funkcje można więc mów
Zdjęcie0371 PROMIENIOWEs OSIOWE Można także wyróżnić bardziej dokładny podział pod wzj Jnym, zależni
DSC00765 Wskaźniki do funkcji Tworzenie tablic ze wskaźników do funkcji można wykorzystywać do tworz
tfdekl Mając wskaźnik f na funkcję, funkcję na którą on wskazuje, wywołuje się podobnie jak w tablic
tfwsk6 Podobnie jak nazwa tablicy jest wskaźnikiem na pierwszy element, nazwa funkcji jest wskaźniki
125 WSKAŹNIKI NA FUNKCJE /* kod...*/> void moje.urzadzenie.zamknij (void) { /* kod... */> int
62397 Zdjęcie0371 PROMIENIOWEs OSIOWE Można także wyróżnić bardziej dokładny podział pod wzj Jnym, z
DSC00747 Zastosowanie wskaźników w argumentach funkcji •    Tablicę można wysiać do f
DSC00677 Zastosowanie wskaźników w argumentach funkcji • Gdy funkcja ma zmienić więcej niż jeden obi
DSC00678 Zastosowanie wskaźników w argumentach funkcji •    Funkcję tę można wywołać

więcej podobnych podstron