Zeiger und Arrays
-
Hallo Leute!
Wenn man Zeiger so behandeln kann als wenn es Arrays sind, warum geht das nicht. Oder mach ich da ein Fehler?
double** array0 = new double* [10]; for(int i=0; i<10; i++){ array0[i] = new double[5]; for(int j=0; j<5; j++) array0[i][j] = 0.6;} double* laa = &array0[0][0]; for(int i=0; i<10; i++){ for(int j=0; j<5; j++){ std::cout << array0[i][j] << " "; /* geht */ //std::cout << laa[i*5+j] << " "; /* geht nicht */ } std::cout << std::endl; }
-
ein derart angelegtes zweidimensionales Array steht nicht notwendigerweise zusammenhängend im Speicher. Du hast irgendwo einen Speicherbereich, in dem hintreinander zehn Adressen stehen. Das sind die Adressen von deinen "5er"-Arrays.
-
xi.xi schrieb:
Wenn man Zeiger so behandeln kann als wenn es Arrays sind
Kann man nicht.
-
Du hast da kein 2D-Array gebaut, sondern eine Art Liste von Listen. Dann funktioniert Zeigerarithmetik nicht.
array0[i][j]ist*(*(array0 + i)+j)
laa[i*5+j]ist*(laa + i*5+j)
Entscheidend ist die fehlende Dereferenzierung.