Witam!
Czy mógłby mi ktos słownie wyjasnic czemu jak przekazujemy tablice do funkcji to musimy podac jej drugi rozmiar?
np. float A[][maxk] ?
Czemu drugi nawiasik tez nie moze byc pusty? :>
Pozdrawiam!
Witam!
Czy mógłby mi ktos słownie wyjasnic czemu jak przekazujemy tablice do funkcji to musimy podac jej drugi rozmiar?
np. float A[][maxk] ?
Czemu drugi nawiasik tez nie moze byc pusty? :>
Pozdrawiam!
Jeżeli masz tablicę dwuwymiarowa(2x3 elementową) to w pamięci wygląda ona mniej więcej tak: //Liczy losowe
[ 1 ] [ 3 ] [ 6 ] [ 7 ] [10 ] [ 34 ]
Jeżeli masz tablicę jednowymiarową(6 elementową) to w pamięci wygląda ona mniej więcej tak:
[ 1 ] [ 3 ] [ 6 ] [ 7 ] [10 ] [ 34 ]
Drugi wymiar jest wymagany, żeby kompilator wiedział jak sobie policzyć w którym miejscu jest [0][2] a w którym [1][2] (dla kontrastu, do policzenia w w którym miejscu jest [2] a [5] wystarczy mu typ zmiennej)
Rozwijając to co napisał @Zellus. Można wyobrazić sobie, że w pamięci tablica wielowymiarowa zapisywana jest ciągiem. Na przykładzie tablicy dwuwymiarowej ustalenie adresu elementu wygląda tak:
mamy tablicę tab
o rozmiarach n x m
, oraz index1
i index2
, które są indeksami dla kolejnych wymiarów
addr = tab + ( index1 * m + index2)
Weźmy przykład z postu wyżej (tab wskazuje na [1]):
[ 1 ] [ 3 ] [ 6 ] [ 7 ] [10 ] [ 34 ]
Dla tab[1][1]
obliczamy:
(1 * 3 + 1) = 4
Więc szukany element to [10]. Bez drugiego wymiaru we wzorze nie mielibyśmy co podstawić pod m
, dlatego rozmiar jest konieczny dla wymiarów od drugiego w zwyż.