Ich will einen vorher Definierten Array einen Wert zuweisen:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
Der Compiler spuckt mir aber das hier aus:
1 | |
|
Anzeige
|
Int Array Wert zuweisenIch will einen vorher Definierten Array einen Wert zuweisen:
Der Compiler spuckt mir aber das hier aus:
Gast
#3059441
zuweisungen geht in C nicht.
Nur initalisierung:
int myArray[3][3] = {{0,1,0}, //Das ist Zeile 12
{0,1,0},
{0,1,0}};
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. Was muss ich dann aber machen, wenn ich dem Array in (z.B.) Zeile 72 einen anderen Wert zuweisen will? 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. OK, trotzdem Danke
Gast
#3059670
Peter II schrieb: > zuweisungen geht in C nicht. Doch, geht schon. Man muß es nur richtig machen: http://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html
Gast
#3059690
Rolf Magnus schrieb: > Doch, geht schon. Man muß es nur richtig machen: > http://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html wo wird es denn dort gemacht?
Gast
#3059714
> wo wird es denn dort gemacht?
Im verlinkten Text. Einfach draufklicken und lesen ;-)
Ich bin mal so frei:
HF
Gast
#3059723
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.
Gast
#3059762
> 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:
> Und das ganze geht auch nur bei eindimensionalen arrays.
Langt auch. Biegt man halt die Typen adäquat hin.
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.
Gast
#3060428
> 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.
Gast
#3060435
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}};
Gast
#3060607
Zuweisen von arrays geht nicht. Zuweisen von struct schon. Damit könnte man das problem folgendermaßen lösen:
Sieht nicht schön aus. Vielleicht doch ein pointer auf das array?
Mit std::vector ist alles gleich viel schöner. Wenn es denn eine einfache initialisierung geben würde. Eindimensional ist zumindest noch übersichtlich:
Aber wir wollten ja leider 2-dimensional. [g++ version 4.4.5 (Debian 4.4.5-8)] Grüße, Steffen 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:
Gast
#3060717
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.
Gast
#3061011
Schönes Feature aus C++11. :-) Das kannte ich noch nicht. 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. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|