Peter K. schrieb:> Ich will einen vorher Definierten Array einen Wert zuweisen:
Merke:
Man kann Arrays nicht als ganzes zuweisen.
Nur intialisieren.
Wenn du also einem Array etwas zuweisen willst, dann musst du das über
Zuweisungen an die Einzelkomponenten machen.
Peter K. schrieb:> Was muss ich dann aber machen, wenn ich dem Array in (z.B.) Zeile 72> einen anderen Wert zuweisen will?
zb.
myArray[0][0] = 0;
myArray[0][1] = 1;
myArray[0][2] = 0;
myArray[1][0] = 0;
myArray[1][1] = 1;
myArray[1][2] = 0;
myArray[2][0] = 0;
myArray[2][1] = 1;
myArray[2][2] = 0;
oder, da bei dir alle 3 Zeilen gleich sind
for( i = 0; i < 2; ++i )
{
myArray[1][0] = 0;
myArray[1][1] = 1;
myArray[1][2] = 0;
}
oder du richtest dir ein Array mit Initialwerten her, welches du bei
Bedarf mittels memcpy über das Zielarray drüber kopierst. Oder .....
Denk dir was aus, was du mit den Sprachmitteln erreichen kannst. Aber so
gehts nicht. Die von dir benutzte Syntax geht nur bei Initialisierungen.
Und eine Zuweisung ist nun mal keine Initialisierung.
g457 schrieb:> Im verlinkten Text. Einfach draufklicken und lesen ;-)
nur das hier etwas anders gemacht wird.
es wird ein zeiger zugewiesen keine werte! Und das ganze geht auch nur
bei eindimensionalen arrays.
Karl Heinz Buchegger schrieb:> oder, da bei dir alle 3 Zeilen gleich sind>> for( i = 0; i < 2; ++i )> {> myArray[1][0] = 0;> myArray[1][1] = 1;> myArray[1][2] = 0;> }
Tippfehler.
Statt myArray[1] soll da myArray[i] stehen, sonst ist die Schleife
irgendwie sinnlos.
> es wird ein zeiger zugewiesen keine werte!
nichts leichter als das (wenngleich es nur abhängig vom Kontext einen
Unterschied macht): memcpy regelt, das Compound als Parameter setzen:
g457 schrieb:> size_t szBufferSize = 5 *sizeof(int);> pArray = malloc(szBufferSize);> memcpy(pArray, (int[]) {10, 11, 12, 13, 14}, szBufferSize);
Warum das unschön ist, ist klar: Hier muss an zwei Stellen darauf
geachtet werden, daß die Arraygröße korrekt ist - bei szBufferSize und
bei der Initialisierung des Arrays.
Das ist eine potentielle Quelle für sehr lustige Fehler.
> Das ist eine potentielle Quelle für sehr lustige Fehler.
Klar, schön ist das nicht. Aber es ∗geht∗ :-)
Mehr mehr Sicherheit will sollte auf C++ und std::vector umsteigen, da
gehen auch ∗echte∗ Zuweisungen von ganzen Arrays (sic!) ohne Klimmzüge.
g457 schrieb:> da> gehen auch ∗echte∗ Zuweisungen von ganzen Arrays (sic!) ohne Klimmzüge.
dann zeig doch mal wie das mit std::vector gehen soll.
int myArray[3][3] = {{0,1,0}, //Das ist Zeile 12
{0,1,0},
{0,1,0}};
Mit std::vector ist alles gleich viel schöner. Wenn es denn eine
einfache initialisierung geben würde. Eindimensional ist zumindest noch
übersichtlich:
Peter II schrieb:> g457 schrieb:>> da>> gehen auch ∗echte∗ Zuweisungen von ganzen Arrays (sic!) ohne Klimmzüge.>> dann zeig doch mal wie das mit std::vector gehen soll.
Das geht so:
Rolf Magnus schrieb:>> dann zeig doch mal wie das mit std::vector gehen soll.> Das geht so:> #include <vector>> int main()> {> std::vector<int> vec1;> std::vector<int> vec2;> vec1 = { 1, 2, 3, 4, 5 }; // seit C++11> vec2 = vec1; // schon immer> }
es ging um 2 dimensonal.
Peter II schrieb:> Rolf Magnus schrieb:>>> dann zeig doch mal wie das mit std::vector gehen soll.>> Das geht so:>> #include <vector>>> int main()>> {>> std::vector<int> vec1;>> std::vector<int> vec2;>> vec1 = { 1, 2, 3, 4, 5 }; // seit C++11>> vec2 = vec1; // schon immer>> }>> es ging um 2 dimensonal.
BITTE, BITTE keine Mega-Thread draus machen. Ich mache es jetzt so:
Karl Heinz Buchegger schrieb:> myArray[0][0] = 0;> myArray[0][1] = 1;> myArray[0][2] = 0;>> myArray[1][0] = 0;> myArray[1][1] = 1;> myArray[1][2] = 0;>> myArray[2][0] = 0;> myArray[2][1] = 1;> myArray[2][2] = 0;
Trotzdem danke, für alle die, die sich mit meinen Problem beschäftigt
haben.