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.


  • Mod

    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.


Anmelden zum Antworten