Zeiger mit Inkrement auf Array
-
@bthight
Ich glaube dein Code müsste so aussehen. Du hast einen einfachen Copy Paste Modify Fehler.#include <iostream> using namespace std; int main() { int array[]={1,22,33,44,55}; int *PointerToArray = 0; PointerToArray= array; int i; for (int i=0;i<=4; i++) { cout << PointerToArray[i] << endl; } }
BTW:
Darf ich mal fragen wo du den Quellcode her hast? Ich sehe des öfteren array als Variablennamen und das ist leider kein guter Name da es ja std::array gibt.
-
Danke für die Hilfe.
Also ich lerne mit einem Buch:
C++ Programmieren für Einsteiger von Michael Bonacina.
Aber das ist für mich teilweise etwas lückenhaft in der Erklärung. Dewegen nutze ich gerne mal Youtube und dort ist ein Youtuber der das ganze echt nett erklärt: Pilzschaf.
Mit dem Array habe ich selbst einfach mal probiert einen Zeiger auf ein Array laufen zu lassen.
--> in Anlehnung an das Video: https://www.youtube.com/watch?v=7GFYpxmldHc&list=PLStQc0GqppuVs05kWvLBoHcWCULX3ueIM&index=13&t=0s
ab Minute 15:40
-
@bthight sagte in Zeiger mit Inkrement auf Array:
Gilt das ++ nicht für das i?
Wofür sonst? Was daran ist automatisch?
-
cout << PointerToArray[i] << endl;
Hmm das funktioniert. Also war meine Idee doch nicht falsch.
-
@bthight sagte in Zeiger mit Inkrement auf Array:
C++ Programmieren für Einsteiger von Michael Bonacina.
Der Mann ist noch schlimmer als Jürgen Wolf. Der kann nicht nur Bücher für zig verschiedene Sprachen und Themen schreiben - nein, nebenbei leitet er auch noch den Verlag.
Buch => Altpapiertonne
-
@manni66 sagte in Zeiger mit Inkrement auf Array:
@bthight sagte in Zeiger mit Inkrement auf Array:
Gilt das ++ nicht für das i?
Wofür sonst? Was daran ist automatisch?
ist das ++ mit dem i direkt verknüpft?
Welches Buch empfiehlst du / empfehlen Sie mir?
Zu meiner Vorbildung: Ingenieur für Maschbau, damals habe ich programmieren gehasst und mich (aus desinteresse) gequält durch Projekte.
-
@bthight sagte in Zeiger mit Inkrement auf Array:
ist das ++ mit dem i direkt verknüpft?
Was sollte
i++
machen? Wozu steht es in der for-Schleife?@bthight sagte in Zeiger mit Inkrement auf Array:
Welches Buch empfiehlst du
Ich lese keine C++ Anfängerbücher. Programming: Principles and Practice Using C++ von Bjarne Stroustrup scheint brauchbar zu sein.
Ansonsten: The Definitive C++ Book Guide and List
-
@manni66 sagte in Zeiger mit Inkrement auf Array:
@bthight sagte in Zeiger mit Inkrement auf Array:
ist das ++ mit dem i direkt verknüpft?
Was sollte
i++
machen? Wozu steht es in der for-Schleife?Jetzt verstehe ich was du meintest.
Ich beziehe mich auf das ++ in der cout Zeile.
Was genau macht das?Nimmt es das i als Inkrement auf?
Weil ich habe ja keine Variable die hochzählt beim cout deklariert.
-
@bthight sagte in Zeiger mit Inkrement auf Array:
Ich beziehe mich auf das ++ in der cout Zeile.
Du hast kein ++ in der cout Zeile.
Was genau macht das?
PointerToArray++;
inkremetiert den Zeiger. i spielt keine Rolle.
-
@bthight sagte in Zeiger mit Inkrement auf Array:
Ich beziehe mich auf das ++ in der cout Zeile.
Das
cout
ist mit dem ; vorbei
-
Aaah. Also ist das sozusagen reiner Zufall, dass das Inkrementieren des Zeigers mittels ++ das gleiche Ergebnis bringt wie [i].
-
@bthight sagte in Zeiger mit Inkrement auf Array:
Aaah. Also ist das sozusagen reiner Zufall, dass das Inkrementieren des Zeigers mittels ++ das gleiche Ergebnis bringt wie [i].
Nein, da ist nichts dran Zufall, das Programm macht absolut vorhersagbar genau das, was es tut. Du bist bloß total verwirrt. Hast du vielleicht anderen Code gepostet als den, über den du gerade nachdenkst? Es macht den Eindruck, du verstehst nicht, worauf die Antworten sich beziehen.
-
@bthight sagte in Zeiger mit Inkrement auf Array:
Aaah. Also ist das sozusagen reiner Zufall, dass das Inkrementieren des Zeigers mittels ++ das gleiche Ergebnis bringt wie [i].
Dass i mal + 1 das Gleiche ergibt wie + i ist kein Zufall.
-
@bthight sagte in Zeiger mit Inkrement auf Array:
PointerToArray+=i; //hier kommt kompletter Käse raus
Das
i
das Du hier verwendest ist das aus (hier im Forum) Zeile9
. Diesesi
ist nicht dasselbe das Du in derfor
-Schleife verwendest. Es ist Uninitialisiert. Kein Wunder daß da "Käse" rauskommt.Für die Zukunft: Schreibe bitte in eine Zeile vor Deinem Code
```
und in eine Zeile nach Deinem Code```
. Oder markiere Deinen Code und klicke auf das</>
in der Bearbeitungsleiste über Deinem Beitrag. Du kannst Deinen Beitrag auch im Nachhinein noch bearbeiten. Den Menüpunkt "Bearbeiten" findest Du hinter dem Drei-Punkte-Menü rechts unter Deinem Beitrag.```cpp
und mit```
abschließen geht für C++ auch.
-
@bthight sagte in Zeiger mit Inkrement auf Array:
PointerToArray++
verändert den Pointer (der zeigt auf die nächste Speicherstelle vom Typ *PointerToArray)
PointerToArray[i]
verändert den Pointer nicht
PointerToArray +=i
verändert den Pointer (der zeigt i Speicherstelle (vom Typ *PointerToArray) weiter)Gerade beim letzten musst du aufpassen, wenn du i als Schleifenzähler hast.
Wenn du das mit "normalen" Variablen machst, wäre das in etwa so:
int j = 0; for (int i=0;i<=4; i++) { cout << j << " " << endl; // immer nur eine Zeile unkommentiert lassen: // j++; // j; j += i; }
-
@DirkB sagte in Zeiger mit Inkrement auf Array:
@bthight sagte in Zeiger mit Inkrement auf Array:
PointerToArray++
verändert den Pointer (der zeigt auf die nächste Speicherstelle vom Typ *PointerToArray)
PointerToArray[i]
verändert den Pointer nicht
PointerToArray +=i
verändert den Pointer (der zeigt i Speicherstelle (vom Typ *PointerToArray) weiter)Gerade beim letzten musst du aufpassen, wenn du i als Schleifenzähler hast.
Wenn du das mit "normalen" Variablen machst, wäre das in etwa so:
int j = 0; for (int i=0;i<=4; i++) { cout << j << " " << endl; // immer nur eine Zeile unkommentiert lassen: // j++; // j; j += i; }
vielen vielen Dank dafür !!
mein Code war etwas komisch geschrieben wahrscheinlich, sodass nicht jeder diesen sofort verstanden hat.Aber diese du hast meine Frage hiermit beantwortet.
-
@Quiche-Lorraine sagte in Zeiger mit Inkrement auf Array:
int *PointerToArray = 0;
Das ist kein Pointer auf ein Array (von int) sondern ein Pointer auf int.
Der Sprachgebrauch (und damit das Verständnis) ist ziemlich wirr, wie üblich, wenn C++ler meinen, sich mit C Zeigern beschäftigen zu müssen.Und ein Array lässt sich auch nicht inkrementieren, weil es ein unmodifizierbarer Lvalue ist, um mal auf die Überschrift dieses Beitrages einzugehen.
-
@bthight
Es gibt noch zwei andere, moderene Varianten über ein Feld zu iterieren:#include <iostream> #include <algorithm> using namespace std; int main() { int Array[] = { 1, 22, 33, 44, 55 }; // 1. Variante for (int Element : Array) { cout << Element << endl; } // 2. Variante for_each(std::begin(Array), std::end(Array), [](int Element) { cout << Element << endl; }); return 0; }