[Anfänger]ich brauch hilfe mit mefachen dynamischen zeigen
-
Dem Beitrag von SeppJ kann ich nur Beipflichten (bin selber Opfer).
Der Indizierungsoperator ist eine Verkürzung um eine Zeigeroperation zu verschönern.
myarray[5][5]entspricht
*(myarray[5]+5)entspricht
*(*(myarray+5)+5).
Möchtest du ein dynamisches, multidimensionales array erstellen, so geht das wiefolgt:
int* myarray=new int[5][5];Zugriff wie gewohnt mit Indizierungsoperator, a la
myarray[3][1] = 50;dann auch am ende Speicherplatz freigeben nicht vergessen!
-
Also folgendes ich hab das buch von nem freund ausgeliehen und werde es nicht wegschmeisen
aber im gedanken kann ich das schon machen ich hab mir auch schon andere sachen durchgelesen und ich hab jetzt auch gehört das das buch mist sein soll aber naja irgendwass muss es ja mit den arrays und zeigern mehrdimensional auf sich haben oder kann man keine merhdimensionalen dynamischen arrays machennaja egal zu meiner hauptfrage weil i-nen grund muss es ja geben das des typ im buch hintert das
new int
einen (*) operator gemacht hat oder? bitte helft mir

-
Hacker schrieb:
D
Möchtest du ein dynamisches, multidimensionales array erstellen, so geht das wiefolgt:int* myarray=new int[5][5];Zugriff wie gewohnt mit Indizierungsoperator, a la
myarray[3][1] = 50;Das würde ich so nicht unterschreiben..
-
Hacker schrieb:
Möchtest du ein dynamisches, multidimensionales array erstellen, so geht das wiefolgt:
int* myarray=new int[5][5];Ne, eben nicht.
Zuerst sollte man sich die Verwendung von Containern angewöhnen. Den
new[]-Operator am besten wieder vergessen.
Eine selbstgebaute Matrix lässt sich viel einfacher handhaben, wenn sie aus einemvectorbesteht. Folgendes Beispiel illustriert Erzeugung und Benutzung:#include <vector> int main() { //Array im C++ Stil mit 5 mal 5 int-Elementen std::vector<int> arr(5 * 5); //die gewünschten Indizes, nur als Beispiel size_t x = 2, y = 3; //Referenzen auf die Elemente erhält man mit dem Indexoperator. //Die zwei Indizes müssen natürlich in einen Index umgerechnet werden. int &element = arr[y * 5 + x]; }
-
@UnKnow[]: Sag mir mal die Seite ...
@cooky451:
Ja, hab vergessen zu erwähnen, dass es massig Probleme mit Pufferüberläufen und co. gibt, da hast du schon recht.
-
okey habs glaub ich jetzt auch besser verstanden und ich denk mir jetzt einfach mal das aus dem buch vergessen
aber könnt ihr mir noch sagen wie ich des dan freigeben mussalso muss ich dan
delete [] arrayname;
oder
delete [][] arrayname; oder wie?mfg

-
Seite 179
-
Unknow[] schrieb:
naja egal zu meiner hauptfrage weil i-nen grund muss es ja geben das des typ im buch hintert das
new int
einen (*) operator gemacht hat oder? bitte helft mir

Es gibt halt verschiedene Sichtweisen, wie man zweidimensionale Arrays aufbaut. "Echte" Arrays (int a[5][5]) haben den Speicher dabei am Stück, sind also äquivalent zu eindimensionalen Arrays. (int a[25])
Nur läuft die Dereferenzierung hier nicht so einfach, man müsste schreiben a[5 * 3 + 1] statt a[5][1].In dem Beispiel wird ein Array von Zeigern angefordert. (new int*[5]). Wenn man jetzt jeden Zeiger in diesem Array wieder auf ein new int[5] zeigen lässt, hat man logisch (nicht technisch, da die Arrays ja auseinanderliegen) ein zweidimensionales Array, auf das man wie gewohnt mit a[5][1] zugreifen kann.
-
Unknow[] schrieb:
okey habs glaub ich jetzt auch besser verstanden und ich denk mir jetzt einfach mal das aus dem buch vergessen
aber könnt ihr mir noch sagen wie ich des dan freigeben mussLass es doch lieber sein. Wenn du das Buch und alles was du da raus "gelernt" hast verwirfst und jetzt noch einmal richtig mit C++ anfängst, dann brauchst du das mit dem new[] das erste Mal in 6 Monaten als kleine Randnotiz a la: "so hätte man das auch machen können, seid ihr nicht froh, dass man solchen Stuss nicht braucht?"
-
okey jetzt vewirrst du mich kann mir jetz ganz einfach jemand sagen was ich machen soll also nachdem oder während ich das buch wegwerfe
-
eine buchempfehlung oder sowas k.a. ich will auf jedenfall c++ richtig lernen ich will jetzt kein buch wo grad mal so erklärt wird was functionen sind und das wars dann
-
Da empfehlen sich mehrere Bücher. Mostly recommended ist hier der C++ Primer, dann gibt es solche Bücher wie Effective C++ oder Exceptional C++ etc. für die Wissenserweiterung.
-
Hacker schrieb:
@cooky451:
Ja, hab vergessen zu erwähnen, dass es massig Probleme mit Pufferüberläufen und co. gibt, da hast du schon recht.Nein, was du geschrieben hast funktioniert einfach nicht.
int* myarray=new int[5][5];<-- Das ist kein gültiges C++!
-
ich hab gehört c++ in 21 tagen soll gut sein ist es das auch ?

-
Unknow[] schrieb:
ich hab gehört c++ in 21 tagen soll gut sein ist es das auch ?

In 21 Tagen? Ich dachte, du willst C++ richtig lernen?
-
okey glaube doch nicht das das buch so gut ist und was haltet ihr von der idee sich einfach ein projekt zu überlegen und halt solange zu rechachieren bist man alles was dafür wissen muss im internet gefunden hat ?

-
Unknow[] schrieb:
okey glaube doch nicht das das buch so gut ist und was haltet ihr von der idee sich einfach ein projekt zu überlegen und halt solange zu rechachieren bist man alles was dafür wissen muss im internet gefunden hat ?

Ganz schlecht. Im Internet schreiben auch viele Wolf-Opfer.
-
Außerdem weißt du gar nicht, was du noch nicht weißt.
-
hmm okey also doch lieber n buch aber wenn ich das jetzt richtig gesehen hab ist das c++ prime in english und naja das 1200 seiten ich weis in so einer branche muss man english können aber gibt es da nicht vieleicht ne andere gute lösung weil ich bin halt nebenbei noch in ner ausbildung
-
Bücher: http://www.c-plusplus.net/forum/251551
Grüssli