Hallo,
ich habe folgende Struktur auf die ich zugreifen möchte irgendwie bin
ich überfragt.
Hat einer einen Rat bzw. Vorschlag wie man das in C macht?
Meine Idee wäre z.B. bei der Zuweisung der Variable so:
1
GenSettings.info[0]=255;
2
GenSettings.zl->TEMP=400;
3
GenSettings.zl->west.ledCW=100;
Aber wie kann ich auf z.B. zl[5].west.ledWW zuweisen?
Wie würde es entsprechend andersherum funktionieren?
Dany schrieb:> Meine Idee wäre z.B. bei der Zuweisung der Variable so:> GenSettings.info[0] = 255;> GenSettings.zl->TEMP = 400;> GenSettings.zl->west.ledCW = 100;
Das funktioniert nicht so. zl ist kein Pointer, sondern ein Array, und
das kann hier nicht synonym verwendet werden:
> ZSet_t zl[8];
Und damit ist die Frage
> Aber wie kann ich auf z.B. zl[5].west.ledWW zuweisen?
eigentlich schon geklärt:
> GenSettings.zl[5].west.ledCW = 100;
Rufus Τ. F. schrieb:> Das funktioniert nicht so. zl ist kein Pointer, sondern ein Array, und> das kann hier nicht synonym verwendet werden:
Wie würde ich auf das Array zugreifen?
Dany schrieb:> GenSettings.info[0] = 255;> GenSettings.zl->TEMP = 400;> GenSettings.zl->west.ledCW = 100;>
Ist diese Zuweisung so korrekt?
1
GenSettings.info[0]=255;
> Wie würde es entsprechend andersherum funktionieren?> uint32_t temp;> int8_t temp1;>> temp = GenSettings.time;> temp1 = GenSettings.zl[3]->west.ledIR;
Wie weise ich das einer anderen Variablen zu?
Dany schrieb:> Ist diese Zuweisung so korrekt?> GenSettings.info[0] = 255;
Ja.
> Wie weise ich das einer anderen Variablen zu?> uint8_t temp1 = GenSettings.info[0];
Genau so.
Trau' Dich doch einfach mal, das Deinem C-Compiler vorzuwerfen. Der gibt
eine Fehlermeldung aus, wenn ihm was nicht passt.
Bei einer Struktur, die ein Array enthält (anders als obiges, wo ich mir
mit der Stringkonstanten das Leben einfach gemacht habe), ist ebenfalls
eine Kombination aus beiden Varianten anzuwenden:
1
structbla
2
{
3
inta;
4
uint8_tb[3];
5
floatc;
6
};
7
8
structblaz={2,{1,2,3},1.234};
Entscheidend ist aber: Das alles ist nur bei Initialisierungen
möglich, nicht aber bei Zuweisungen.
Rufus Τ. F. schrieb:> Das ist keine Initialisierung, sondern eine Zuweisung.
Sorry ich meinte eine Zuweisung.
Wie weise ich dem Array alle Elemente welches sich in der Struktur
befindet
mit verschiedenen Werten elegant zu und nicht manuell wie ich das hier
gemacht habe:
1
GenSettings.zl[0].west.ledCW=23;
2
GenSettings.zl[1].west.ledCW=44;
3
GenSettings.zl[2].west.ledCW=23;
4
GenSettings.zl[3].west.ledCW=78;
5
GenSettings.zl[4].west.ledCW=99;
6
GenSettings.zl[5].west.ledCW=102;
7
GenSettings.zl[6].west.ledCW=234;
8
GenSettings.zl[7].west.ledCW=255;
9
GenSettings.zl[8].west.ledCW=2;
p.s. Vielen Dank für die super Erklärung das bringt mich enorm weiter !
C keinnt keine Arrayzuweisung. Die einzige Möglichkeit, das, was Du da
machen willst, eleganter zu machen, ist eben die Initialisierung.
Alternativ (aber kaum noch elegant) könntest Du ein zweites Array
gleicher Größe und gleichen Typs anlegen, das mit den gewünschten Daten
initialisieren und seinen Inhalt mit memcpy() in das Zielarray kopieren.
Stefan E. schrieb:> void Set_ledCW (const uint8_t *data) {>> for (uint8_t i = 0; i < 9; i++)> GenSettings.zl[i].west.ledCW = data[i];> }> Aufruf:Set_ledCW((const uint8_t[]){23,44,23,78,99,102,234,255,2});
super sowas hab ich gesucht :-)
Stefan E. schrieb:> Übrigens: ZSet_t zl[8];Dein zl ist zu klein.
Danke. copy & paste Fehler sollte nur bis [7] gehen ;-)