Arrayeintrag über Pointer ändern
-
Hallo*,
ist es möglich einen arrayeintrag mit Hilfe eines Pointers zu ändern?
Nutze ich folgendes:
Artist test; test = *ArtistArray; std::cout << test.getName(); test.setName("Hallllllllllooo"); std::cout << test.getName(); std::cout << ArtistArray[0].getName();bekomme ich die Ausgabe:
Default-Hallllllllllooo-Default. Das kann ich nicht ganz nachvollziehen, eig greife ich doch richtig auf den Eintrag zu?
-
Vermutlich ist ein Bug in der Implementierung von Artist, die du leider nicht gezeigt hast.
-
Wo ist denn da ein Pointer?
-
Ich sehe das leicht anders

test = *ArtistArray;An dieser Stelle wird der Zuweisungsoperator aufgerufen, so dass test eine Kopie von deinem Array-Eintrag ist.
Du musst entweder eine Referenz verwende oder einen Pointer:
Artist& test(*ArtistArray);So sollte es glaub ich funktionieren (ungetestet)
Gruß,
XSpille
-
Dome89 schrieb:
ist es möglich einen arrayeintrag mit Hilfe eines Pointers zu ändern?
Klar, sofern die Elemente im Array überhaupt änderbar sind.
Dome89 schrieb:
Nutze ich folgendes:
Artist test; test = *ArtistArray; std::cout << test.getName(); test.setName("Hallllllllllooo"); std::cout << test.getName(); std::cout << ArtistArray[0].getName();bekomme ich die Ausgabe:
Default-Hallllllllllooo-Default.
Das kann ich nicht ganz nachvollziehen, eig greife ich doch richtig auf den Eintrag zu?Ich kenne Artist und ArtistArray jetzt nicht. Aber besonders überraschend sieht das Verhalten jetzt nicht aus. Vergleiche es mit
#include <iostream> using namespace std; int main() { int arr[5] = {0,1,2,3,4}; int t = arr[2]; t += 10; cout << arr[2] << endl; }Du scheinst hier zu erwarten, dass das Programm 12 ausgibt. Warum?
arr[2]undtsind zwei verschiedene int-Objekte wobeitmit dem Wert vonarr[2]initialisiert wurde. Variablen von Klassentypen funktionieren in C++ genauso. Sie sind keine Referenzen.