Drugi rozmiar tablicy przy przekazywaniu do funkcji.

0

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!

2

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)

0

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ż.

1 użytkowników online, w tym zalogowanych: 0, gości: 1