Witam, zgłębiam sobie temat tablic wielowymiarowych i wskaźników do tychże, napisałem sobie mały program, którym mogę sobie sprawdzać efekty różnych działań itd.
Problem mam jednak z tym, żeby zrozumieć jak działa tutaj komputer. Pamięć mamy przecież ułożoną liniowo. Jedna szufladka jest obok drugiej i wielowymiarowa tablica nie jest dla komputera przecież tak naprawdę tabelką.
Najpierw szybko częsc kodu programu:
int d_tablica[3][3];
int n = 0;
for (int i = 0;i <= 2; i++) {
for (int j = 0;j <= 2; j++) {
n++;
d_tablica[i][j] = n;
printf("%3d", d_tablica[i][j]);
}
cout << endl;
}
int z,x;
bool b;
do {
cout << "podaj wiersz i kolumne: ";
cin >> z >> x;
cout << endl << endl << endl;
cout << *(*(d_tablica + z) + x) << endl; // o tu
cout << (int)&*(*(d_tablica + z) + x) << endl; // i tu
cout << "kontynuowac?: ";
cin >> b;
cout << endl;
} while (b == true);
_getch();
Dlaczego zapis w linijkach z komentarzem przesuwa wskaźnik o różne ilosci bajtów? Gdybysmy wyobrazili sobie pamiec jako tabelke - oczywista oczywistosc. Jeden wskaznik przesuwa się w poziomie, a potem drugi przesuwa ten pierwszy w pionie. Natomiast każdy kto wie jak zbudowana jest pamięć zdaje sobie sprawe, że żadnych tabelek nie ma. Wobec tego dlaczego ( kiedy np ustawimy z i x na 1 ) program raz przesunie wskaznik o jedną szufladkę, a potem nagle o 3. Przecież wskaźnik wskazuje na początek całej lini szufladek a nie na cały trzyszufladkowy obiekt.