39000

39000



122


ROZDZIAŁ 17. WSKAŹNIKI

Ostatnią funkcją jest funkcja ca!loc(). Przyjmuje ona dwa argumenty: liczbę elementów tablicy oraz wielkość pojedynczego elementu. Podstawową różnicą pomiędzy funkcjami mal-loc() i calloc() jest to, że ta druga zeruje wartość przydzielonej pamięci (do wszystkich bajtów wpisuje wartość 0).

Tablice wielowymiarowe

1

2

3

4

5

6

7

8

9

Rysunek 17.4: tablica dwuwymiarowa w rzeczywistości tablica ze wskaźnikami do tablic

W rozdziale Tablice pokazaliśmy, jak tworzyć tablice wielowymiarowe, gdy ich rozmiar jest znany w czasie kompilacji. Teraz zaprezentujemy, jak to wykonać za pomocą wskaźników i to w sytuacji, gdy rozmiar może się zmieniać. Załóżmy, że chcemy stworzyć tabliczkę mnożenia:

int rozmiar; int i;

int “tabliczka;

printf("Podaj rozmiar tabliczki mnożenia: ");

scanf("%i", ^rozmiar); /* dla prostoty nie będziemy sprawdzali,

czy użytkownik wpisał sensowną wartość •/

tabliczka ■ malloc(rozmiar * sizeof *tabliczka);    /• 1 •/

for (i ■ 0; Krozmiar; ♦♦!) {    /• 2 •/

tabliczka[i] = malloc(rozmień: * sizeof “tabliczka);    /• 3 •/

}    /• 4 •/

for (i - 0; i<rozmiar; ♦♦i) { int j;

for (j ■ 0; j<rozmiar; ♦♦j) { tabliczka[i][j] = (i+l)*(j+l);

>

>

Najpierw musimy przydzielić pamięć- najpierw dla "tablicy tablic" (1) a potem dla każdej z |x>dtahlic osobno (2-4). Ponieważ tablica jest typu int* to nasza tablica tablic l>ę-dzie wskaźnikiem na int* czyli int**. Podobnie osobno, ale w odwrotnej kolejności będziemy zwalniać tablicę wielowymiarową:

for (i = 0; icrozmiar; ++i) { free(tabliczka[i] );

>

free(tabliczka);

Należy nie pomylić kolejności: po wykonaniu free(tabliczka) nie będziemy mieli prawa odwoływać się do tabliczka [i] (lx> wcześniej dokonaliśmy zwolnienia tego obszaru pamięci).



Wyszukiwarka

Podobne podstrony:
118 ROZDZIAŁ 17. WSKAŹNIKI Zwróćmy uwagę na wywołanie func(kz);. Należy pamiętać, by do funkcji
124 ROZDZIAŁ 17. WSKAŹNIKI określone miejsce w pamięci. A ponieważ funkcja ma swój adres®, to nie ma
klsti434 463 ROZDZIAŁ 17. BUDOWNICTWO niących funkcję budowli gospodarskich, jak i konstrukcja zdarz
116 ROZDZIAŁ 17. WSKAŹNIKI Wskaźniki można również od siebie odejmować, czego wynikiem jest
126 ROZDZIAŁ 17. WSKAŹNIKI I struct urządzenie moje_urzadzeuie; moje_uxzadzenie.nl =
114 ROZDZIAŁ 17. WSKAŹNIKI +--------► IkomórkalI +--------+ llllllllll * (unsigned char)
120 ROZDZIAŁ 17. WSKAŹNIKI Wskaźniki na stalą wartość są przydatne między innymi w sytuacji gdy mamy
126 ROZDZIAŁ 17. WSKAŹNIKI { struct urządzenie moje.urządzeńle; moje.urzadzenie.m -
P6010221 Więcej o funkcjach; wskaźniki do funkcji Często zachodzi potrzeba uźycia4unkcji jako argume
26 27(1) Rozdział 3Oczyszczanie komórkowe Ostatnio w modzie jest oczyszczanie organizmu z toksyn. Wi
DSC07120 (4) 170 Badanie funkcji Z postaci funkcji d wynika, że przyjmuje ona warto# najmniejszy w p
85 ZOBACZ TEŻ Przyjmuje ona jako argument ciąg znaków, w których niektóre instruują funkcję, by pobr
Image055 zerojedynkowe zmiennych niezależnych. Ostatnia kolumna jest przeznaczona do zapisania warto
skanuj0452 (2) Rozdział 17. ♦ System news Kod rozpoczyna się od wywołania funkcji session_start, doł

więcej podobnych podstron