Frage zum Zeigeroperator -> bzw Dereferenzierungsoperator *
-
Hallo an alle!
Meine ersten Versuche
(mit Visual C++ 2005 unter zuhilfenahme des Buch "Einstieg in Visual C++ 2005")
brachten folgenden Quehlcode zutage:vector<int> v; // Eine Vector-Variable namens v vector<int> *w; // Ein Zeiger auf eine Vector-Variable w = &v; // Der Vector-Zeiger bekommt die Adresse des Vector v v.push_back(123); // Wertzuweisung v.push_back(881); // Wertzuweisung (*w).push_back(8); // Wertzuweisung cout << "Groesse des Vector: " << v.size() << endl; cout << "Groesse des Vector ueber Zeiger : " << (*w).size() << endl; cout << "Groesse des Vector ueber Zeigeroperator: " << w->size() << endl; cout << "Inhalt Vector[0]: " << v[0] << endl; cout << "Inhalt Vector[1]: " << v[1] << endl; cout << "Inhalt Vector[1]: " << v[2] << endl; cout << "Inhalt Vector[0] ueber Zeiger *w: " << (*w)[0] << endl; cout << "Inhalt Vector[1] ueber Zeiger *w: " << (*w)[1] << endl; cout << "Inhalt Vector[2] ueber Zeiger *w: " << (*w)[2] << endl; cout << "Inhalt Vector[1] ueber Zeiger ->: " << w->[1] << endl;Hat jemand bitte eine kurze Erklärung für mich, warum der Code in der Zeile 20 fehlerhaft ist, wo doch der Code in den Zeilen 11 und 12 funktioniert?
Ich meine wenn ich doch mit(*w).size() und w->size()richtig liege, warum dann nicht auch mit
(*w)[2] und w->[1]Fehlermeldung:
zeig.cpp
d:\daten\c\vccp\zeiger\pmzeiger\zeiger\zeig.cpp(37) : error C2059: Syntaxfehler: '['
Viele Grüsse
-
var->attribut entspricht (*var).attribut. Da [] aber ein operator ist geht es eben nicht (der . fehlt quasi)
-
Plan_B schrieb:
Hat jemand bitte eine kurze Erklärung für mich, warum der Code in der Zeile 20 fehlerhaft ist, wo doch der Code in den Zeilen 11 und 12 funktioniert?
Ich meine wenn ich doch mit(*w).size() und w->size()richtig liege, warum dann nicht auch mit
(*w)[2] und w->[1]Hi Plan_B,
ist eigentlich ganz einfach erklärt:Da size eine Methode/Funtkion ist kannst du mit der Zeigerarethmetik den "->" verwenden.
Es ist genau das gleiche, wenn du dir eine Instanz einer Klasse mit "new" allokierst und die Methoden in der Klasse über den Zeiger ansprechen willst.hmm ist vielleicht etwas dumm erklärt aber ich hoffe es kam rüber auf was ich hinaus will...

-
Du kannst den [] Operator auch über -> aufrufen. Allerdings ist das wohl etwas unelegant.

cout << "Inhalt Vector[1] ueber Zeiger ->: " << w->operator[](1) << endl;
-
Warum unelegant? (*w)[] sieht auch nicht besser aus.
-
das ist wohl Geschmackssache. Ich hab beides schon gesehen.
-
Hi!
Vielen Dank für die Antworten/Erklärungen.
Hmmm, ich glaub' da werde ich noch eine Menge lernen müssen *kopfkratz*
Aber zum Glück gibt es ja viele Tutorials hier
Es gibt ja bald nichts was hier nicht erklärt wird
Thx