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 ;)