Witam,
męczę się cały dzień z poruszaniem się za pomocą wskaźników po dwuwymiarowej tablicy tworzonej dynamicznie (za pomocą operatora new). Chcę poruszać się po niej w taki sposób, aby iterując wyciągać wpierw dane z kolumny.
Macierz jest kwadratowa, 10x10.
Otóż działa poniższy kod:
size = 10;
float** m1; // inicjalizowana wcześniej tablica
float *mptr;
for(int j = 0; j < size; ++j)
{
for(int i = 0; i < size; ++i)
{
mptr = m1[i] + j;
cout << (long)*mptr << " ";
}
cout << endl;
}
Przykład który nie działa (pierwsza kolumna wyświetlona dobrze, w następnych w niektórych miejscach wyświetlane są złe wartości albo śmieci):
float* mbase = m1[0]; // adres podstawowy
for(int j = 0; j < size; ++j)
{
for(int i = 0; i < size; ++i)
{
mptr = mbase + size * i + j;
// próbowałem też: mptr = mbase + size * i * sizeof(float) + j;
cout << *mptr << " ";
}
cout << endl;
}
Mam jeszcze takie pytanie, czym różni się zapis: m1[0] od &m1[0] ? I czy ten drugi zapis ma sens w ogóle (adres z adresu?) Pytam, bo gdy wipisuję sobie adres za pomocą cout << (long)&m1[0]; albo (long)m1[0] to dostaję dwie różne wartości...
Pozdrawiam,
gals