Witam mam problem z wykorzystaniem arytmetyki wskaźników dla tablicy dwuelementowej.
Jeśli chodzi tablicę jednoelementową nie mam żadnych problemów.
#include <iostream>
using namespace std;
int main()
{
int tablica_jeden[5]={5,4,3,2,1};
cout<<"Wyswietlam poczatkowy adres pamieci tablica_jeden: "<<'\n';
cout<<(int)tablica_jeden<<'\n';
cout<<"Wyswietlam koncowy adres pamieci tablica_jeden: "<<'\n';
cout<<(int)&tablica_jeden[4]<<'\n';
cout<<"Wyswietlam koncowy adres pamieci tablica_jeden, korzystam z arytmetyki wskaznikow: "<<'\n';
cout<<(int)&*(tablica_jeden+4)<<'\n';
return 0;
}
Natomiast w przypadku tablicy dwuwymiarowej mam problem z uzyskaniem odpowiedniego adresu pamięci korzystając z arytmetyki wskaźników;
#include <iostream>
using namespace std;
int main()
{
int tablica[3][3]=
{
{0,6,0},
{0,0,9},
{3,0,0}
};
// rzeczywiste ulozenie pamieci
// {0,6,0},{0,0,9},{3,0,0}
cout<<"Wyswietlam poczatkowy adres pamieci tablica[3][3] "<<'\n';
cout<<(int)tablica<<'\n';
cout<<"Wyswietlam koncowy adres pamieci tablica[3][3]: "<<'\n';
cout<<(int)&tablica[3][3]<<'\n';
return 0;
}
Wiem ze tablica w pamięci jest ułożona liniowo dlatego aby dostać się do ostatniego elementu[3][3] muszę do adresu początkowego tablicy dodać 8(szufladek) *4(dla typu int), czyli liczbe 48;
Stworzyłem taki zapis.
cout<<"Wykorzystanie arytmetyki wskaznikow: ";
cout<<(int)&*(tablica +2)+8;
Wiem ze w przypadku takiej tablicy pierwsza wartosc oznacza numer wiersza * jej rozmiar(kolumny), ale chciałbym to zapisać bardziej fachowo.
Z góry dziękuje za pomoc, wskazówki.