Wie versteht man Zeigerarithmetik??
-
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; }
-
Wie oft denn noch?
Hier von mir:
http://www.c-plusplus.net/forum/p2281857#2281857
http://www.c-plusplus.net/forum/p2281731#2281731
http://www.c-plusplus.net/forum/p2281727#2281727
Und von Anderen:
http://www.c-plusplus.net/forum/p2281629#2281629
http://www.c-plusplus.net/forum/p2281527#2281527
mehr suche ich jetzt nicht
-
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
ralphHabe 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.