pointer frage



  • Hi
    hier ist der main teil:

    int main()
    {
        int wieviel;
    
        cout << "\nWie viele Daten wollen Sie einlesen?";
        cout << "\nGeben Sie 0 fuer Abbruch ein: ";
        cin >> wieviel;
    
        if(wieviel == 0)
            exit(1);                                // beendet ein Programm, cstdlib wichtig!!
    
        int* feld = new int [wieviel];              // Zeiger feld auf Array
    
        for(int i = 0; i < wieviel; i++)
        {
            cout << "\nFeld Nummer " << i << " eingeben: ";
            cin >> feld[i];                        // Pointer auch als Felder nutzen
        }
    
        for(int j = 0; j < wieviel; j++)
        {
            cout << "\nMit Zeiger   > " << *(feld + j);
            cout << "\nMit Feldname > " << feld[j];
        }
    
        fflush(stdin); cin.peek();
        return 0;
    }
    

    Mir gehs nur um die beiden letzten cout - Zeilen:

    *(feld + j) und feld[j] geben das gleiche Ergebnis raus...

    nur ich versteh nicht, wieso... springt *(feld + j) die Bytes von einem Element nicht sofort weiter?? so das gar nicht das 0te Element berührt wird??

    Ich hoffe ihr versteht mich 😉

    Ciao 🙂



  • Für Built-in-Types (und auch für Klasse wenn du nicht die ensprechenden Operatoren überlädst) gilt wirklich dass
    *(pointer +n)
    das selbe ist wie
    pointer[n]

    Wenn du zu einem Pointer n "addierst" erhälts du einen Pointer der n-te Element hinter dem Pointer zeigt. Die Erhöhung in Bytes kommt also auf den Typ an. Du kannst deshalb auch keine void* erhöhen.

    Du solltest drauf achten deine Arrays auch wieder ordnungsgemäß aus dem Speicher zu entfernen.

    Gruß



  • gut danke...

    dann versteh ich das jetzt!
    👍 👍


Anmelden zum Antworten