Wie versteht man Zeigerarithmetik??



  • Sorry, mein Fehler, habe den Pointer nicht auf den Array initialisiert...

    int *pZahl=&Zahl[5];
    


  • silent_max schrieb:

    int *pZahl=&Zahl[5];
    

    Sag mal, was soll denn der Scheiß jetzt schon wieder. 😮
    Kannst du dir nicht mal merken, was hier seit gestern mehrmals geschrieben wird.
    🙄 😡 😞 👎

    Diese Initialisierung ist Humbug. Du bekommst damit die Adresse vom Element mit dem Index 5. Das existiert nicht.
    Die Indizes gehen nur von 0 bis 4.



  • Dann zeig mir mal bitte ganz konkret, wie ich über Pointer an die Adresse eines Arrays hinkomme.

    Bitte an folgendem Beispiel:

    #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 Zahlen 
    	int *pZahl=0;
    
    	for(int i=0; i<5; i++)
    	{
    		cout << "Zahl[" << i << "]: " << &Zahl[i] << "\n";
    	}
    
    	cout << pZahl + 0 << "\n";
    	cout << pZahl + 1 << "\n";
    	cout << pZahl + 2 << "\n";
    	cout << pZahl + 3 << "\n";
    	cout << pZahl + 4 << "\n";
    
    	return 0;
    }
    




  • DirkB schrieb:

    mehr suche ich jetzt nicht

    Brauchst Du auch nicht. Ich glaube, dass der Thread besser geschlossen wird.



  • silent_max schrieb:

    Bitte an folgendem Beispiel:

    ...
    

    Ersetze
    int *pZahl=0;
    durch
    int *pZahl=Zahl;
    dann hast Du einen Zeiger auf das erste Element des Arrays. Die anderen Elemente bekommst Du mit Zeigerarithmetik (pZahl + 1, pZahl + 2...).

    int *pZahl=&Zahl[5]; tut nicht das, was Du denkst. Du bekommst nicht einen Zeiger auf ein Array[5], sondern einen Zeiger auf das sechste Element des Arrays. Da es das nicht gibt, kann alles Mögliche passieren, wenn Du darauf zugreifen willst.

    viele grüße
    ralph



  • rkhb schrieb:

    silent_max schrieb:

    Bitte an folgendem Beispiel:

    ...
    

    Ersetze
    int *pZahl=0;
    durch
    int *pZahl=Zahl;
    dann hast Du einen Zeiger auf das erste Element des Arrays. Die anderen Elemente bekommst Du mit Zeigerarithmetik (pZahl + 1, pZahl + 2...).

    int *pZahl=&Zahl[5]; tut nicht das, was Du denkst. Du bekommst nicht einen Zeiger auf ein Array[5], sondern einen Zeiger auf das sechste Element des Arrays. Da es das nicht gibt, kann alles Mögliche passieren, wenn Du darauf zugreifen willst.

    viele grüße
    ralph

    Habe ich schon geändert.

    #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 Zahlen 
    	int *pZahl=Zahl;
    
    	for(int i=0; i<5; i++)
    	{
    		cout << "Zahl[" << i << "]: " << &Zahl[i] << "\n";
    	}
    
    	cout << pZahl + 0 << "\n";
    	cout << pZahl + 1 << "\n";
    	cout << pZahl + 2 << "\n";
    	cout << pZahl + 3 << "\n";
    	cout << pZahl + 4 << "\n";
    
    	return 0;
    }
    


  • silent_max schrieb:

    Dann zeig mir mal bitte ganz konkret, wie ich über Pointer an die Adresse eines Arrays hinkomme.

    TROLL



  • Bitte schließen! Das riecht hier zu sehr nach blurry33 und Co.



  • 👍

    KasF schrieb:

    Bitte schließen! Das riecht hier zu sehr nach blurry33 und Co.



  • silent_max schrieb:

    Habe ich schon geändert.

    So, nachdem Du nun gesehen hast, dass die Speicheradressen identisch sind, willst Du auch an die Inhalte des Arrays kommen:

    #include<iostream>
    using namespace std;
    
    int main()
    {
        int Zahl[5] = {2, 1, 0, 21,12}; //Array mit 5 Zahlen
        int *pZahl=Zahl;
    
        for(int i=0; i<5; i++)
        {
            cout << "Zahl[" << i << "]: " << Zahl[i] << "\n";
        }
    
        cout << *(pZahl + 0) << "\n";
        cout << *(pZahl + 1) << "\n";
        cout << *(pZahl + 2) << "\n";
        cout << *(pZahl + 3) << "\n";
        cout << *(pZahl + 4) << "\n";
    
        return 0;
    }
    

    Und sag Deinem Lehrer, dass es nicht "Integerwert" heißt, sondern "ganze Zahl".

    viele grüße
    ralph



  • Es gibt Personen, die fürs Programmieren einfach nicht talentiert sind.

    Auf den Threadersteller trifft das nach diesen Zig Fehlern trotz Hinweisen & Beispielen vieler, sicherlich zu.

    Ich hoffe, dass du niemals in einem Beruf arbeitest, dess Aufgabentätigkeit daraus besteht, Software zu entwickeln.


Anmelden zum Antworten