Jeśli mamy tablice tab[x][y] oraz strukture:

struct{

char a,b; //char to 1 bajt

int c //int to 4 bajty

}

A chcemy obliczyc adres jakiejs komorki, np &tab[z][w] to liczymy w nastepujacy sposob:

=wartość_poczatkowa + (z*y+w)*rozmiar_struktury.

Rozmiar_struktury jest rowny sumie WIELKKOSCI wszystkich elementow znajdujących się w tej strukturze. Czyli 2x1(char) + 1x4(int)

wartość_poczatkowa=zawsze jest podana.

100 + (z*y+w)*6.

POWYZSZY PRZYKŁAD OPISUJE OBLICZANIE DLA PIERWSZEGO ELEMENTU.

Dla ostatniego elementu takiej tablicy obliczanie jest analogowe, z jednym wyjątkiem, musimy do tego wyniku dodac jeszcze rozmiar struktury (calej) pomniejszonej o 1.

Wiec korzystając z tych założeń, adres koncowy to:

100 + (z*y+w)*6 + 5.

Jeśli zas chodzi o takie przypadki, gdzie jest tab[x][y].a, wówczas jest to troche inaczej liczone.

ADRES POCZATKOWY:

100 + (z*y+w)*6+rozmiar_struktury

// rozmiar_struktury - ale tylko dla wart a. Literal a znajduje się na pierwszym miejscu w strukturze, wówczas wartość jest rowna 0 i nic się nie dodaje. Jeśli zamiast `a' będzie `b', wówczas dodajemy wielkość struktury o jeden mniejszej (czyli wielkość spod `a'). Analogicznie, jeśli będzie `c', wówczas dodajemy SUME wszystkich rozmiarow oprocz rozmiaru dla `c'.

Zatem dla przykładu: tab[x][y].c, obliczamy:

100 + (z*y+w)*6+2

ADRES KONCOWY DLA POWYZSZEGO PRZYKLADU;

tab[x][y].c

100 + (z*y+w)*6+(rozmiar struktury dla c - 1)

100 + (z*y+w)*6+(1+1+4-1)= 100 + (z*y+w)*6+5

Mam nadzieje, ze nie popełniłem jakiejs gafy i przyda Ci się ta teoria. Pozdrawiam. W razie co brac studencka pomoze w potrzebie ;)