Wie versteht man Zeigerarithmetik??



  • out schrieb:

    Nein, jetzt hast du einen Pointer auf ein char.

    char, wie komm ich auf char 😕 ich meinte natürlich int.

    Sone schrieb:

    Ein Array (ich spreche hier sowohl von echten als auch von sequentiellen STL-Containern) ist intern einfach ein Zeiger auf das erste Element des Arrays im Speicher.

    Nimm den Satz aus deinem Post raus. 🤡



  • out schrieb:

    Sone schrieb:

    Ein Array (ich spreche hier sowohl von echten als auch von sequentiellen STL-Containern) ist intern einfach ein Zeiger auf das erste Element des Arrays im Speicher.

    Nimm den Satz aus deinem Post raus. 🤡

    Korrigiert, ich schäme mich. 😃
    War im Eifer des Gefechts :xmas1:



  • silent_max schrieb:

    Ich hoffe, dass es jetzt bisschen verständlicher wird??

    Du hast (wie erwartet) vergessen die Begründungen mit anzugeben. Hat vielleicht was damit zu tun, dass 90% des Codes sinnlos ist.



  • Belli schrieb:

    Humbug!

    Was ist da Humbug? Wenn du int* p schreibst hast du nunmal einen Zeiger auf ein int. War schon immer so.



  • Na und?
    Du hast behauptet, ich hätte einen Zeiger auf char.



  • out schrieb:

    out schrieb:

    Nein, jetzt hast du einen Pointer auf ein char.

    char, wie komm ich auf char 😕 ich meinte natürlich int.

    Es geht ja so schnell hier, da überliest man schonmal was. :p



  • Dann halt hier mit Begründungen:

    #include<iostream>
    using namespace std;
    
    int main()
    {
        cout << "\t 5 Adressen um jeweils 4 Byte hochzaehlen lassen.\n";
        cout << "\n";
    
        int Zahl[5]; //Array mit 5 Elementen initialisieren, damit ich 5 Elemente habe
        int *pZahl = &Zahl[5]; //Pointer auf das Array initialisieren, damit ich auf die Adressen des Arrays zugreifen kann
        int a; // Variable deklarieren, damit ich fuer cin nachher Werte eingeben kann und diesmal nicht i habe
    
        cout << "Geben Sie fuenf Zahlen ein.\n";
    
        for(int i=0; i<5; i++)
        {
            cout << "Zahl[" << i <<"]: "; //Für Elemente von 0 bis 4 Werte bzw. Zahlen eingeben
            cin  >> a; //Variable a fuer die Werteeingabe, damit ich z. B. 1,2,3,4,5 eigeben kann
        }
    
        cout << "Die Adresse der jeweiligen Zahl lautet wie folgt:\n";
    
        for(int i=0; i<5; i++)
        {
            cout << "Zahl[" << i << "]: " << &Zahl[i] << "\n"; // Adresse fuer die Elemente 0 bis 4 ausgeben, also fuer insgesamt 5 Elemente( Element 0, Element 1, Element 2, Element 3, Element 4 sind nun mal 5 Elemente oder rechne ich falsch??????????????)
        }
    
        return 0;
    }
    

    [quote="cooky451"]

    silent_max schrieb:

    Du hast (wie erwartet) vergessen die Begründungen mit anzugeben. Hat vielleicht was damit zu tun, dass 90% des Codes sinnlos ist.

    Und da Du den Code schon länger als sinnlos erachtest, bitte ich Dich darum, einen äquivalenten Code zu schreiben, der die Speicheradressen von insgesamt
    5 Elementen ausliest....


  • Mod

    silent_max schrieb:

    Und da Du den Code schon länger als sinnlos erachtest, bitte ich Dich darum, einen äquivalenten Code zu schreiben, der die Speicheradressen von insgesamt
    5 Elementen ausliest....

    Was ist der Sinn von folgende Zeilen: 10, 11, 15-19, 28? Was passiert, wenn du sie weglässt? Was hat die Ausgabe in Zeile 6 mit dem zu tun, was das Programm tatsächlich macht?



  • SeppJ schrieb:

    Was ist der Sinn von folgende Zeilen: 10, 11, 15-19, 28? Was passiert, wenn du sie weglässt? Was hat die Ausgabe in Zeile 6 mit dem zu tun, was das Programm tatsächlich macht?

    Ich wollte halt von 5 Elementen, die ich von der Tastatur einlese, die Adresse auslesen lassen.

    Dass man Zeile 10 prinzipiell weglassen kann, habe ich erst im Laufe des Threads mitbekommen.

    Edit:

    Was ich dazu sagen sollte:

    Ich wollte einfach ein Programm schreiben, das mir von 5 Elementen die ich per Tastatur einlese, um am Beispiel meines Programms zu bleiben von int, in 4 Byte Abständen die Speicheradressen auslesen lassen. Nicht mehr und auch nicht weniger



  • Also ich zum Beispiel, ich bin zu blöd zum Tapezieren und Anstreichen, ich kann nicht mal vernünftig einen Nagel in die Wand kloppen ...
    Ich hab das irgendwann eingesehen, und dann hab ich es einfach sein lassen ...


  • Mod

    silent_max schrieb:

    Ich wollte einfach ein Programm schreiben, das mir von 5 Elementen die ich per Tastatur einlese, um am Beispiel meines Programms zu bleiben von int, in 4 Byte Abständen die Speicheradressen auslesen lassen. Nicht mehr und auch nicht weniger

    Tja, tut es aber nicht.

    Meinst du nicht vielleicht, dass ich dich mit meiner Frage auf irgendetwas aufmerksam machen wollte oder bist du der Ansicht, dass dein Programm so absolut in Ordnung ist?



  • silent_max schrieb:

    Ich wollte einfach ein Programm schreiben, das mir von 5 Elementen die ich per Tastatur einlese

    Lass Dir Deine Zahlen mal zum Spaß ausgeben. Du füllst das Array nicht mit Werten, es ist totaler Blödsinn den Du da gemacht hast. Die Eingaben werden in a gemacht, und landen nie im Array.

    Blurry333 postet auch wieder. Ihr würdet euch bestimmt gut verstehen.


  • Mod

    Verstehe nicht, wie man bei diesem Thema 10 Seiten brauchen kann, ohne zu einem Abschluss zu kommen...



  • [quote="silent_max"]Dann halt hier mit Begründungen:

    #include<iostream>
    using namespace std;
    
    int main()
    {
        cout << "\t 5 Adressen um jeweils 4 Byte hochzaehlen lassen.\n";
        cout << "\n";
    
        int Zahl[5]; //Array mit 5 Elementen initialisieren, damit ich 5 Elemente habe // Um was damit zu tun?
        int *pZahl = &Zahl[5]; //Pointer auf das Array initialisieren, damit ich auf die Adressen des Arrays zugreifen kann // Das kannst du auch so? Du benutzt den Pointer nicht mal.
        int a; // Variable deklarieren, damit ich fuer cin nachher Werte eingeben kann und diesmal nicht i habe // Der Satz macht keinen Sinn.
    
        cout << "Geben Sie fuenf Zahlen ein.\n";
    
        for(int i=0; i<5; i++)
        {
            cout << "Zahl[" << i <<"]: "; //Für Elemente von 0 bis 4 Werte bzw. Zahlen eingeben
            cin  >> a; //Variable a fuer die Werteeingabe, damit ich z. B. 1,2,3,4,5 eigeben kann // Um was damit zu tun?
        }
    
        cout << "Die Adresse der jeweiligen Zahl lautet wie folgt:\n";
    
        for(int i=0; i<5; i++)
        {
            cout << "Zahl[" << i << "]: " << &Zahl[i] << "\n"; // 
        }
    
        return 0;
    }
    

    silent_max schrieb:

    Und da Du den Code schon länger als sinnlos erachtest, bitte ich Dich darum, einen äquivalenten Code zu schreiben, der die Speicheradressen von insgesamt 5 Elementen ausliest....

    #include <iostream>
    
    int main()
    {
      int arr[5];
    
      for (unsigned i = 0; i != 5; ++i)
        std::cout << &arr[i] << '\n';
    }
    

    Fällt dir was auf?



  • SeppJ schrieb:

    Meinst du nicht vielleicht, dass ich dich mit meiner Frage auf irgendetwas aufmerksam machen wollte oder bist du der Ansicht, dass dein Programm so absolut in Ordnung ist?

    Sorry, aber ich hocke schon viel zu lange vor meinem Netbook. Ich muss echt mal eine Pause machen... Ich glaube, dass Du mich mit Deiner Frage auf etwas hinweisen wolltest, so viel raff ich im Moment noch.

    Alles andere werde ich später bearbeiten, wenn ich eine Pause gemacht habe.

    Ich hätte jetzt mal an Dich SeppJ eine Frage... Handelt es sich dabei bei der ganzen Thematik um Referenzen?? Weil im Endeffekt handelt es sich ja nicht mehr um Pointer, denn wenn ich Zeile 10

    int *pZahl = &Zahl[5];
    

    weg lassen kann...



  • Belli schrieb:

    Also ich zum Beispiel, ich bin zu blöd zum Tapezieren und Anstreichen, ich kann nicht mal vernünftig einen Nagel in die Wand kloppen ...
    Ich hab das irgendwann eingesehen, und dann hab ich es einfach sein lassen ...

    Ja das haben die dem Arnold auch eingeredet, als er die ersten 20 mal versucht hat Schauspieler zu werden.



  • camper schrieb:

    Verstehe nicht, wie man bei diesem Thema 10 Seiten brauchen kann, ohne zu einem Abschluss zu kommen...

    Ich amüsier´ mich königlich. Kann ruhig noch ein paar Seiten weitergehen 😃



  • Der hat ja dann wohl aus irgend einem Grund einen Arbeitgeber gefunden. Möchtest Du silent_max einen Job als C++ - Programmierer geben?



  • Namal schrieb:

    Ja das haben die dem Arnold auch eingeredet, als er die ersten 20 mal versucht hat Schauspieler zu werden.

    Aber seien wir doch mal ehrlich.. sie hatten recht. 😃



  • silent_max schrieb:

    Handelt es sich dabei bei der ganzen Thematik um Referenzen?? Weil im Endeffekt handelt es sich ja nicht mehr um Pointer, denn wenn ich Zeile 10

    e um Referenzen geht es hier nicht. Es geht hier auch eigentlich nicht um Pointer. Es geht hier einfach nur um ein Array und dessen Elemente.


Anmelden zum Antworten