Zeiger auf einen Zeiger der auf ein int array zeigt. - Probleme beim Datenabruf
-
Hallo!
Ich habe folgende Ausgangslage:
int a[5] = {1,2,3,4,5};
int *ptr;
int **ptrptr;ptr = &a;
ptrptr = &ptr;soweit so gut.
mit ptr auf Elemente auf a zugreifen ist kein Problem.
(also zB: *ptr = 5; oder ptr[3] = 3 etc...);nun möchte ich aber über ptrptr an die Elemente aus a kommen.
Das erste Element funktioniert einfach mit doppelter dereferenzierung
printf("%i", **ptrptr);
Nur wie komme ich nun an die anderen Elemente dran? Ich habe schon viel rumprobiert aber komme an keine anderen Werte dran
mit
printf("%i", *(++*ptrptr));
kam ich immerhin an den Wert von a[1] ;-)....
Vielen Dank für die Hilfe schonmal!
-
damnnic schrieb:
Hallo!
Ich habe folgende Ausgangslage:
int a[5] = {1,2,3,4,5};
int *ptr;
int **ptrptr;ptr = &a;
ptrptr = &ptr;soweit so gut.
Strenggenommen nicht ganz, du hast einen Typfehler, es sollte
ptr = a; /* oder ptr = &a[0]; */
heißen.
&a
hat den Typint (*)[5]
, nichtint*
; die Umwandlung macht der Compiler eigentlich nur unter Protest (aka Warnung).Nur wie komme ich nun an die anderen Elemente dran? Ich habe schon viel rumprobiert aber komme an keine anderen Werte dran
Nicht so kompliziert denken.
(*ptrptr)[3]
-
Mit *ptrptr greifst du auf ptr zu.
Du wilst ptr[2] haben, dann schreibst du
(*ptrptr)[2]
-
einfach zb *(*ptrptr+2)...
-
Bashar schrieb:
damnnic schrieb:
Hallo!
Ich habe folgende Ausgangslage:
int a[5] = {1,2,3,4,5};
int *ptr;
int **ptrptr;ptr = &a;
ptrptr = &ptr;soweit so gut.
Strenggenommen nicht ganz, du hast einen Typfehler, es sollte
ptr = a; /* oder ptr = &a[0]; */
heißen.
&a
hat den Typint (*)[5]
, nichtint*
; die Umwandlung macht der Compiler eigentlich nur unter Protest (aka Warnung).Nur wie komme ich nun an die anderen Elemente dran? Ich habe schon viel rumprobiert aber komme an keine anderen Werte dran
Nicht so kompliziert denken.
(*ptr)[3]
Bei mir Visual C++ 2008, erzeugte das eine Fehlermeldung und das zu recht, da man voraussetzt, das der Array auch nacheinander im Speicher abgebildet wird, wenn man da wild mit Zeigern draufhaut...
-
RR schrieb:
Bei mir Visual C++ 2008, erzeugte das eine Fehlermeldung und das zu recht, da man voraussetzt, das der Array auch nacheinander im Speicher abgebildet wird, wenn man da wild mit Zeigern draufhaut...
Ich weiß leider nicht, was du meinst. Es liest sich komischerweise so als seist du der Ansicht, dass Arrayelemente nicht direkt hintereinander im Speicher liegen. Ich nehm also vernünftigerweise an, dass du dich über meinen Verschreiber lustig machst? Ja, (*ptr)[3] sollte (*ptrptr)[3] heißen ...
-
Bashar schrieb:
RR schrieb:
Bei mir Visual C++ 2008, erzeugte das eine Fehlermeldung und das zu recht, da man voraussetzt, das der Array auch nacheinander im Speicher abgebildet wird, wenn man da wild mit Zeigern draufhaut...
Ich weiß leider nicht, was du meinst. Es liest sich komischerweise so als seist du der Ansicht, dass Arrayelemente nicht direkt hintereinander im Speicher liegen. Ich nehm also vernünftigerweise an, dass du dich über meinen Verschreiber lustig machst? Ja, (*ptr)[3] sollte (*ptrptr)[3] heißen ...
Kann man da immer sicher sein? Daß Array-Elemente wirklich nacheinander im Speicher angeordnet sind?
-
RR schrieb:
Kann man da immer sicher sein? Daß Array-Elemente wirklich nacheinander im Speicher angeordnet sind?
Ja.
-
Bashar schrieb:
RR schrieb:
Kann man da immer sicher sein? Daß Array-Elemente wirklich nacheinander im Speicher angeordnet sind?
Ja.
Stimmt, mein Fehler, ein Char-Array ist ja auch immer nacheinander angeordnet...sorry, ich habe schon einige Zeit nicht mehr programmiert.
-
Danke euch allen
ptr = &a; ja das war ein schrebfehler. Habe den code nicht kompiliert gehabt.
ptr = a ist klar wegen dem array.Ich habe mir schon gedacht dass es an der Klammerierung liegt mein Problem aber ich kam einfach nicht drauf.
Meine geistigen Kapazitäten sind einfach zu gering