Pointer - Adresserhöhung
-
Hallo Kollegen,
folgendes Codingbeispiel:int main() { int arr[256] = {1,2,3,4,5,6,7}; int *p = arr; int *r = arr; // Zum jetzigen Zeitpunkt pointen beide Zeiger auf den ersten Wert im int // Array arr -> Speicheradresse des ersten Wertes 0x22fd70 // Nun möchte ich auf das 2te Element zugreifen.. und nun funktioniert beides: p++; *(r++); // Beide Pointer zeigen jetzt auf die Speicheradresse 0x22fd74 }
Nun meine Frage... welchen Sinn macht das 2te Beispiel (= *(r++)). In welchem Zusammenhang verwendet man das eine oder das andere?
Beides funktioniert...
Wäre super wenn mir das jemand erklären könnte..
-
mit dem '*' wird auf das zugegriffen, worauf der pointer zeigt. in deinem beispiel macht es aber keinen sinn, weil du weder liest noch schreibst.
oder meinst du vielleicht (*r)++ ?
-
vista schrieb:
mit dem '*' wird auf das zugegriffen, worauf der pointer zeigt. in deinem beispiel macht es aber keinen sinn, weil du weder liest noch schreibst.
oder meinst du vielleicht (*r)++ ?Hallo vista,
das mir schon klar das mit "*r" auf das zugegriffen auf was r zeigt.Ich will auf das 2te Element des Arrarys arr zugreifen. In meinen Beispiel zeige ich mit beiden Operationen "p++;" bzw. "*(r++);" auf das 2te Element von arr.
Wenn ich jetzt nun mit *p bzw. *r den Wert auslesen würde... würden beide das gleiche ausgeben...
Das was du mit "(*r)++" machst.. ist ja den Inhalt des Elements um eins zu erhöhen... das will ich nicht...
Meine Frage ist... wann verwendet man zum Erhöhen der Pointeradressen welche Syntax oder ist das egal und einfach von Programmierer zu Programmierer unterschiedlich.
-
um einfach nur eins weiterzuzählen (auf's nächste element zu zeigen) kannst du schreiben:
r++; // oder r = r + 1; // oder r += 1;
alles andere, wie klammern und '*' braucht man nicht.
-
vista schrieb:
um einfach nur eins weiterzuzählen (auf's nächste element zu zeigen) kannst du schreiben:
r++; // oder r = r + 1; // oder r += 1;
alles andere, wie klammern und '*' braucht man nicht.
Genau darum gings mir... es ist also wirklich nur unterschiedliche Schreibweise und hat keinen besonderen "Sinn" oder Ethik
Habe bisher nämlich immer *(r++) zum Erhöhen von Speicheradressen verwendet... und nun die andere Syntax in fremden Coding entdeckt... deswegen wollte ich ma wissen was es damit auf sich hat....
Alles klar
-
Wenn Du nur den Zeiger weiterschieben willst macht die Dereferenzierung aber keinen Sinn. Von daher ist die Antwort auf die Ursprungsfrage eher: Das zweite macht man nur wenn man gleichzeitig das Datum (bevor der Zeiger weitergeschoben wird übrigens) auslesen will.
-
LordJaxom schrieb:
Das zweite macht man nur wenn man gleichzeitig das Datum (bevor der Zeiger weitergeschoben wird übrigens) auslesen will.
Hmm was meinst du mit Datum auslesen?
Gehe wir mal von folgendem Coding aus:
int main() { int arr[256] = {1,2,3,4,5,6,7}; int *p = arr; int test; int *r; r = &test; p++; // jetzt pointet p auf die Speicheradressse des 2. Elementes von arr // (=Wert 2) *r = *(p++); // Hier würde jetzt erst das 2.Element (=Wert 2) von arr // ausgelesen, in test geschrieben (über Pointer r) und // danach der Zeiger auf das nächste Element von arr gerückt // (neuer Wert auf den p pointet wäre dann 3) }
Habe ich dich dann so richtig verstanden? Wenn das so ist... dann macht das wirklich wenig Sinn
Zumindest gibt der Debugger und ein paar Testausgaben den obigen Kommentaren im Coding recht... naja ab sofort lass ich dann den Dereferenzierungsoperator weg... alles klar
-
Richtig, das meinte ich (und diese Anwendung mit gleichzeitigem Auslesen sieht man durchaus auch öfter).