C_NOOBI schrieb:> Wie löst man so etwas sauber?
Im Prinzip sehe ich zwei Möglichkeiten:
1.) Wenn Du wirklich ein drittes Array brauchst und haben willst, dann
lege ein drittes, leeres Array an. In dieses kopierst Du dann die
Elemente von entweder Array_1[] oder Array_2[] einzeln nacheinander
rein, z.B. mit einer for-Schleife.
2.) Vielleicht reicht es aber auch schon, einen Zeiger zu verwenden.
Dieser wird auf dasjenige Array gesetzt, welches eben ausgewählt wurde.
Der Zeiger würde dann auf das erste Element des gewählten Arrays zeigen,
und über ihn könnte man die Werte auslesen. Wobei man dazu noch die Info
benötigt, wie viele Elemente das Array hat.
So wird das nichts.
Woher weisst du dann wie groß das entsprechende Array ist?
Du brauchst dann entweder eine Hilfsvariable mit der Größe
Oder du hast mindestens ein null Element am Ende des Arrays anhand
dessen du erkennst dass du am Ende des Arrays angekommen bist.
So definierst du ein Array:
C_NOOBI schrieb:> double Array_to_choose[];
Aber so wird es nicht benutzt:
C_NOOBI schrieb:> Array_to_choose[] = Array_1[];
Sondern so:
Array_to_choose = Array_1;
So hat das keinen Sinn, das sind die absoluten Grundlagen über die
Verwendung von Arrayvariablen. Wenn du die nicht kennst, dann stehst du
mit deinen Programmierbemühungen in 10 Minuten wieder hier auf der
Matte.
Du brauchst ein C Buch und musst die ersten paar Kapitel auch
durcharbeiten bevor du versuchst eigene Programme zu schreiben.
Genau,
in Deinem Fall wird wahrscheinlich die Lösung mit den Zeigern am besten
sein.
Das geht dann so:
1
doubleArray_1[]={1,2,3,4,5};
2
doubleArray_2[]={6,7,8};
3
double*Array_to_choose;
4
5
...
6
7
unsignedcharmenucounter;
8
Switch(menucounter)
9
{
10
case0:
11
Array_to_choose=Array_1;
12
break;
13
case1:
14
Array_to_choose=Array_2;
15
break;
16
}
Array_to_choose wird als Zeiger auf double definiert (so wie Du es
hattest ist es auch richtig, also als leeres Array). In dem case wird
dann der Zeiger auf die Startadresse entweder von Array_1 oder Array_2
gesetzt.
Die Alternative mit einem KOPIEREN der Elemente sähe so aus:
1
doubleArray_1[]={1,2,3,4,5};
2
doubleArray_2[]={6,7,8};
3
doubleArray_to_choose[10];/* muss genug Platz haben! */
4
5
...
6
7
unsignedcharmenucounter;
8
Switch(menucounter)
9
{
10
case0:
11
memcpy(Array_to_choose,Array_1,sizeof(Array_1));
12
break;
13
case1:
14
memcpy(Array_to_choose,Array_2,sizeof(Array_2));
15
break;
16
}
Allerdings weist Du in beiden Fällen garnicht, wieviele gültige Werte Du
in Array_to_choose hast, kann ja je nach Auswahl unterschiedlich sein.
Entweder müsstest Du noch eine Variable für die Anzahl der Werte
einführem oder das Array mit z.B. einer "0" als Endkennung abschließen.
EDIT: Ich schließe mich meinen Vorschreibern an, ein C-Buch/Kurs ist
angeraten.
> Jetzt möchte ich einen Menucounter abfragen und diesen auswerten und> je nach dem das Array_to_choose mit einem der beiden Arrays gleichsetzen.
Du musst hier deine Gedanken anders ordnen.
Du willst nicht ein Array mit einem anderen Array gleich setzen, sondern
du willst dir einen Verweis bauen, der je nachdem entweder auf das eine
Array zeigt, oder auf das andere.
1
doubleArray_1[]={1,2,3,4,5};
2
doubleArray_2[]={6,7,8};
3
double*Array_to_choose;
4
5
unsignedcharmenucounter;
6
switch(menucounter)
7
{
8
case0:
9
Array_to_choose=Array_1;
10
break;
11
case1:
12
Array_to_choose=Array_2;
13
break;
14
}
und ja. Es hilft nichts. Du wirst dich auch mit Pointer beschäftigen
müssen.
Genau deswegen ist es auch so wichtig, seine Programmiersprache zu
kennen. Von der Pieke auf zu kennen. Für ein reales Programm benötigt
man eben eine Menge Konzepte in der einen oder anderen Form. Kennst du
nur 5% der Möglichkeiten deiner Programmiersprache, stehst du bei realen
Programmen sofort im Regen. Ganz im Gegenteil ist es sogar ausgesprochen
schwierig, Übungsbeispiele für Anfänger zu erfinden, die nur minimales
Wissen erfordern, so wie es sich bei einem Lerndenden eben nach und nach
ansammelt.
Bei Arrays in C sind nach der Definition weder die Größe noch die
Speicheradresse änderbar.
Leeren Klammern bei der Definition funktionieren nur, wenn du das Array
auch gleichzeitig initialisierst. Sonst weiß der Compiler nicht wie groß
das Array werden soll.
Du musst stattdessen Zeiger benutzen.
Rufus Τ. Firefly schrieb:> Udo Schmitt schrieb:>> Sondern so:>> Array_to_choose = Array_1;>> Nein, auch nicht.>> Arrays können einander nicht zugewiesen werden.
Mist, man merkt dass ich langsam in C einroste.
Ich muss mich entschuldigen, da ich Funktionsparameter im Kopf hatte.