Pointer auf mehrdimensionales Array - gelöst
-
silent_max schrieb:
#define Anzahl_1 5 //5 als Konstante definieren für die erste Dimension #define Anzahl_2 5 //5 als Konstante definieren für die zweite DimensionSo etwas ist in C bestimmt üblich. In C++ eher nicht. Makros sind aus Google-baren Gründen eher blöd. in C++ kannst du einfach schreiben
const int anzahl1 = 5; const int anzahl2 = 5;und das sind dann auch "Compile-Zeit-Konstanten", die man für die Größe eines Arrays verwenden kann.
silent_max schrieb:
double Zahlen[Anzahl_1][Anzahl_2]; //Array mit 2 Dimensionen erzeugen double *pZahlen = {&Zahlen[Anzahl_1][Anzahl_2]};//Pointer auf den zweidimensionalen Array deklarieren und gleichzeitig initialisierenAber pZahl ist doch vom Typ
double*, also nur ein Zeiger auf double. Und womit genau initialisierst du pZahl? Was ist das für eine Adresse? Worauf bezieht sie sich?silent_max schrieb:
double a; //Variable erzeugen cout << "Geben Sie 25 Werte ein!\n";//Selbsterklärend for(int i=0; i<Anzahl_1; i++) //Schleife für die erste Dimension erzeugen for(int j=0; j<Anzahl_2; j++) //Schleife für die zweite Dimension erzeugen { cout << "Zahl[" << i << "][" << j << "]:"; //Das z.B. "Zahl[2][4]:" in der Textausgabe steht cin >> a; //Möglichkeit für die Eingabe der 25 Zahlen bzw. Werte }Hier hast du etwas vergessen. Du kommst bestimmt selbst drauf. Und wenn nicht, spiel das mal mit einem Debugger durch, wenn du das Problem mit pZahl beseitigt hast.
silent_max schrieb:
cout << "Diese Speicheradressen sind verwendet worden:\n";//selbsterklärend for(int i=0; i<Anzahl_1; i++)//siehe oben for(int j=0; j<Anzahl_2; j++)//siehe oben { cout << "Zahl[" << i << "][" << j << "]" << &pZahlen[i][j];// Ausgabe der Speicheradressen für die 25 eingegebenen Werten }&pZahlen[i][j] wird wie folgt implizit geklammert: &((pZahlen[i])[j])
pZahlen ist ja ein Zeiger auf double
Was ist dann der Typ des Ausdrucks pZahlen[i]?
Was ist dann der Typ des Ausdrucks pZahlen[i][j]?
Und worauf bezieht sich die Adresse, wenn du noch den Adressoperator davor hängst?
-
silent_max schrieb:
{ // ?Muss ich eingeben, wenn nicht mosert mein CompilerDieses Zitat bringt wunderbar zum Ausdruck, was bei dir falsch läuft und wieso deine Programme nie funktionieren und nie funktionieren werden.
c.rackwitz schrieb:
Wenn du selber Code schreibst, musst du ihn auch verstehen. Code ist kein Haufen von wahllos zusammengeschmissenen Buchstaben und Zeichen, Code ist Logik pur. Du musst genau wissen, warum du wo und welches Zeichen setzt.
-
silent_max schrieb:
double * pZahlen // Pointer vom Typ double deklariern = { // Muss ich eingeben, wenn nicht mosert mein Compiler &Zahlen[Anzahl_1][Anzahl_2] // Adressen der jeweiligen Zahlen/Werte von z.Bsp. Zahl[4][1] };Adressen? Mehrzahl? Warum das denn?
Bitte pflück mal den Ausdruck auseinander: &Zahlen[Anzahl_1][Anzahl_2]
Das ist äquivalent zu folgender Klammerung &((Zahlen[Anzahl_1])[Anzahl_2])
Und jetzt arbeite Dich bitte von innen nach außen. Sage, mit was für Typen du auf jeder Stufe zu tun hast und was für ein Wert rauskommt bzw worauf er sich bezieht.
-
@silent_max
Ist dir aufgefallen das schon wieder deine Initialisierung vom Pointer angemeckert wurde.
Genau so wie bei den letzten Threads von dir.
Auch aus dem gleichen Grund.Willst du nicht mal darüber nachdenken was du schreibst.
Die anderen hier wollten wissen, warum du in der Zeile 9
double *pZahlen = {&Zahlen[Anzahl_1][Anzahl_2]};- das & benutzt
- die [] nimmst
- warum da Anzahl_1 und Anzahl_2 stehen.
Beantworte das mal.
Dein "//Pointer auf den zweidimensionalen Array deklarieren und gleichzeitig initialisieren" kann sich hier jeder denken.
Wir wollen nur wissen, warum du das so machen möchtest und mal darüber nachdenkst.
-
silent_max schrieb:
double Zahlen[Anzahl_1][Anzahl_2]; //Array mit 2 Dimensionen erzeugen double *pZahlen = {&Zahlen[Anzahl_1][Anzahl_2]};//Pointer auf den zweidimensionalen Array deklarieren und gleichzeitig initialisierenAber pZahl ist doch vom Typ
double*, also nur ein Zeiger auf double. Und womit genau initialisierst du pZahl? Was ist das für eine Adresse? Worauf bezieht sie sich?[/quote]Was meinst Du jetzt mit pZahl?
silent_max schrieb:
double a; //Variable erzeugen cout << "Geben Sie 25 Werte ein!\n";//Selbsterklärend for(int i=0; i<Anzahl_1; i++) //Schleife für die erste Dimension erzeugen for(int j=0; j<Anzahl_2; j++) //Schleife für die zweite Dimension erzeugen { cout << "Zahl[" << i << "][" << j << "]:"; //Das z.B. "Zahl[2][4]:" in der Textausgabe steht cin >> a; //Möglichkeit für die Eingabe der 25 Zahlen bzw. Werte }Hier hast du etwas vergessen. Du kommst bestimmt selbst drauf. Und wenn nicht, spiel das mal mit einem Debugger durch, wenn du das Problem mit pZahl beseitigt hast.
Ich komme selbst mit´m Debugger darauf, was Du meinst....
silent_max schrieb:
cout << "Diese Speicheradressen sind verwendet worden:\n";//selbsterklärend for(int i=0; i<Anzahl_1; i++)//siehe oben for(int j=0; j<Anzahl_2; j++)//siehe oben { cout << "Zahl[" << i << "][" << j << "]" << &pZahlen[i][j];// Ausgabe der Speicheradressen für die 25 eingegebenen Werten }&pZahlen[i][j] wird wie folgt implizit geklammert: &((pZahlen[i])[j])
[/quote]Wenn ich das mache dann kommt bei mir die Meldung "Der Ausdruck muss den Typ
"pointer-to-object" aufweisen.pZahlen ist ja ein Zeiger auf double
Was ist dann der Typ des Ausdrucks pZahlen[i]?
Was ist dann der Typ des Ausdrucks pZahlen[i][j]?
Und worauf bezieht sich die Adresse, wenn du noch den Adressoperator davor hängst?
So wie ich Dich jetzt verstehe, muss ich drei Pointer deklarieren?
*pZahlen[i]
*pZahlen[j]
*pZahlen[i][j]
-
DirkB schrieb:
- das & benutzt //Wenn ich einen Pointer auf eine eine Zahl setze, dann muss ich doch z.B.*pa = &a schreiben?????? - die [] nimmst //Dachte, dass man bei mehrdimensionalen Arrays eben für eine Ebene eben die eckigen Klammern verwendet - warum da Anzahl_1 und Anzahl_2 stehen.// Sind eben Platzhalter für die als Konstante deklarierte 5
-
Wenn du ein Array definierst mit
int a[5][5];, existiert dann ein Elementa[5][5]?int a[5][5]; ... a[5][5] = 12; // ist das erlaubt?
-
silent_max ist ein
TROLL
Bitte schließen
-
for(int i=0; i<Anzahl_1; i++) for(int j=0; j<Anzahl_2; j++) { cout << "Zahl[" << i << "][" << j << "]:"; cin >> a; }Den gleichen Unsinn, für eine angebliche Eingabe in Arrays, hat er schon im anderen Thread veranstaltet.
Und ist dabei jeder Nachfrage geschickt aus dem Weg gegangen.Mods, please, das ist ein verdammter Troll. Merkt ihr das nicht?
-
Erst wenn der Faden hier auch 20 Seiten hat.
-
weltuntergang schrieb:
Mods, please, das ist ein verdammter Troll.
Dann antworte doch einfach nicht! Das ist wesentlich einfacher.
Ich persönlich (und ich wette auch viele andere) finde die silent_max-Threads viel zu gute Unterhaltung, als dass ich sie schließen möchte. Es schadet schließlich auch niemandem direkt. Es ist schade um einige kompetente Leute, die hier ihre Zeit mit Antworten verschwenden, aber ich glaube die haben sowieso genug Zeit und selber Spaß an der Sache.
-
SeppJ schrieb:
weltuntergang schrieb:
Mods, please, das ist ein verdammter Troll.
Dann antworte doch einfach nicht! Das ist wesentlich einfacher.
Ich persönlich (und ich wette auch viele andere) finde die silent_max-Threads viel zu gute Unterhaltung, als dass ich sie schließen möchte. Es schadet schließlich auch niemandem direkt.
Ist das hier zu einem Spaß-Forum verkommen?
Es schadet der Qualität des Forums.
Weißt Du, gegen völlig untalentierte Anfänger habe ich garnichts. Aber silent_max ist ein Troll. Mehrfach beantwortete Fragen stellt er wieder und wieder, und die dumme Forengemeinschaft antwortet mit guter Absicht auch weiterhin.Fun-Threads gehören nach NADRW, nicht in das Subforum, dass das Aushängeschild dieses Boards ist.
-
Nachtrag:
Es ist lächerlich, wie man sich hier auf der Nase herumtanzen lässt. blurry, Sone, silent_max, sdf ...
-
SeppJ schrieb:
Ich persönlich (und ich wette auch viele andere) finde die silent_max-Threads viel zu gute Unterhaltung, als dass ich sie schließen möchte. Es schadet schließlich auch niemandem direkt. Es ist schade um einige kompetente Leute, die hier ihre Zeit mit Antworten verschwenden, aber ich glaube die haben sowieso genug Zeit und selber Spaß an der Sache.
Ich bin eigentlich nicht der Ansicht, dass allgemeine Belustigung der Zweck dieses Forums sein sollte, dafür gibt es NadrW.
Zudem stellt der Thread Zeitverschwendung auch für die Leute dar, die sich mangels Niveau gegen das Partizipieren entscheiden.
-
Ich bin eigentlich nicht der Ansicht, dass allgemeine Belustigung der Zweck dieses Forums sein sollte
Das ist er auch nicht und das wird durch solche Threads auch nicht impliziert. Wie kommst du darauf?
Ein, zwei lustige Threads schaden niemandem.
Erst wenn solche Zwanzig-Seiter zur Routine werden, hinterlässt das etwas.Klar könnte man meinen, es schadet dem Image wenn silent_max wiederholend dieselben, zig mal beantworteten Fragen stellt, weil es dann so scheint als könne hier niemand richtig erklären.
Andererseits ist sein Verhalten in eben jenen Threads aber auch schon vorgezeigt und kommentiert worden.
Wer diese also liest, weiß bescheid wieso zu diesem Thema 20 Seiten geschrieben wurden (ich muss zugeben, die eine wurde auch dank mir geschrieben, aber was solls :p ) und selbst das nicht reichte (AFAIR hat er doch am Ende einfach aufgegeben).Alles in allem würde ich schon sagen, dass sich Max' Verhalten langsam an das Blurrys annähert.
Möglicherweise ist es sogar ein und dieselbe Person.Was mich allerdings in Staunen versetzt, ist die Tatsache, dass wenn es wirklich nur die Absicht von Blurry (und ggf. Max) war, zu trollen, sie es ganze zwei (bzw. ein) Jahr(e) taten (!).
Das kommt in die Kategorie extreme Zeitverschwendung, den Trollen geht auch schneller und effektiver.
Also ist das recht unwahrscheinlich.Eine mMn bessere Erklärung ist die Folgende: Möglicherweise (wie ich schon in einem anderen Thread vermutet habe) haben beide eine geistige Behinderung, das würde den Zeitaufwand und die Lernresistenz erklären und ist für mich die plausibelste Erklärung.
-
Ich muß weltuntergang beipflichten.
Daß ein Troll wie silent_max hier über Monate durchgefüttert wird ist irritierend.
Aber Sone allein genügt, um mir die Freude an jeglichem interessanten Thread kaputtzumachen.Das Niveau leidet spürbar.
-
-
Anonymer Nörgler schrieb:
Das Niveau leidet spürbar.

Eine liberale Forenpolitik ist ersteinmal zu begrüßen. Aber sobald der Punkt erreicht ist, dass das Niveau durch Einzelpersonen leidet, sollte etwas unternommen werden.
Die Moderation versagt völlig, wenn notorische Trolle hier ihr Unwesen treiben. Das Forum verliert zunehmend seine Glaubwürdigkeit, man kann es nicht mehr empfehlen. Es ist keine glaubwürdige Ressource mehr.
Es gibt hier einige Perlen. Leute die wahnsinnig viel Ahnung haben, deren Beiträge jedesmal eine Quelle für neues Wissen und tiefere Einsichten sind. Aber das alles wird überschattet durch Trolle und völlig lernresistente Leute, die bestensfalls ermahnt werden und danach fröhlig weiter machen.
Für mich ist der Punkt erreicht, dass ich mich von diesem Board abwende, wenn sich an dem Umgang mit Trollen und, verzeihung, Idioten, nichts ändert.
Eröffnet vielleicht ein Subforum für totale Anfängerfragen. Dieser Vorschlag wurde immer wieder verworfen, aber es könnte helfen. Imho wurde dieser Vorschlag stets mit sehr schwachen Argumenten abgelehnt; wie etwas dass dann für jedes Subforum ein eigenes Anfängerforum notwendig wäre (ist es nicht), oder dass die Leute nicht wüssten, wo zu posten ist (dafür gibt es im Zweifel die Moderatoren). Jede Frage unter einem gewissen Nieveau (aus Sicht des Moderators), wird in das Anfängerforum verschoben. Damit wird das auch eine Sammelstelle für Trolle und Lernresistente. Ernsthaft interessierte Leser können sich aber, ohne ständig mit geistigem Abfall konfrontiert zu werden, den eigentlichen Subforen zuwenden.
Hier muss was passieren Leute
-
Ach, ich find silent_max und seine threads auch irgendwie lustig. Popkorn halt.
-
silent_max schrieb:
esperanto schrieb:
silent_max schrieb:
double Zahlen[Anzahl_1][Anzahl_2]; //Array mit 2 Dimensionen erzeugen double *pZahlen = {&Zahlen[Anzahl_1][Anzahl_2]};//Pointer auf den zweidimensionalen Array deklarieren und gleichzeitig initialisierenAber pZahl ist doch vom Typ
double*, also nur ein Zeiger auf double. Und womit genau initialisierst du pZahl? Was ist das für eine Adresse? Worauf bezieht sie sich?Was meinst Du jetzt mit pZahl?
Ich meinte natürlich pZahlen.
silent_max schrieb:
esperanto schrieb:
silent_max schrieb:
cout << "Diese Speicheradressen sind verwendet worden:\n";//selbsterklärend for(int i=0; i<Anzahl_1; i++)//siehe oben for(int j=0; j<Anzahl_2; j++)//siehe oben { cout << "Zahl[" << i << "][" << j << "]" << &pZahlen[i][j];// Ausgabe der Speicheradressen für die 25 eingegebenen Werten }&pZahlen[i][j] wird wie folgt implizit geklammert: &((pZahlen[i])[j])
Wenn ich das mache dann kommt bei mir die Meldung "Der Ausdruck muss den Typ
"pointer-to-object" aufweisen.Die Klammerung ändert auch nichts an der Falschheit deines Codes. Die Klammerung war dazu gedacht, dir klar zu machen, wie der Compiler den Ausdruck versteht. 9+8*7 kann man auch 9+(8*7) schreiben, ohne dass da etwas anderes bei rauskommt.
silent_max schrieb:
esperanto schrieb:
pZahlen ist ja ein Zeiger auf double
Was ist dann der Typ des Ausdrucks pZahlen[i]?
Was ist dann der Typ des Ausdrucks pZahlen[i][j]?
Und worauf bezieht sich die Adresse, wenn du noch den Adressoperator davor hängst?So wie ich Dich jetzt verstehe, muss ich drei Pointer deklarieren?
*pZahlen[i]
*pZahlen[j]
*pZahlen[i][j]Keine Ahnung, wie du darauf kommst. Meine Fragen hast du damit nicht beantwortet. Was Ausdrücke in C++ sind, solltest du wahrscheinlich mal nachlesen.