C: array in array of arrays schreiben

Gast #4525565
Lesenswert?
• ▲
▼
Hallo!
Es ist mir fast peinlich aber ich hab einen Knopf im Hirn und es ist 
irgendwie sauschwer das in Google zu suchen (array in array of arrays 
blablabla).
1
#define BUFFER_SIZE 8
2

3
uint16_t pot_buffer[BUFFER_SIZE][4];
4

5
uint16_t pottest[4];
6
pottest[0] = 123;
7
pottest[1] = 456;
8
pottest[2] = 789;
9
pottest[3] = 169;
10

11
pot_buffer[1].potstates = pottest; //ERROR

ERROR: left operand of '.' is not struct/class/union object

Also ich seh hier ein mehrdimensionales Array, meiner Auffassung nach 
besteht das aus 8 Einträgen mit Pointern zu Arrays mit Grösse 4.
Wo ist mein Denkfehler?
Peinlich peinlich.
Gast #4525573
Lesenswert?
• ▲
▼
uh ich seh grad das ist garnicht das initiale Problem, da hab ich schon 
was mit structs probiert.
1
pot_buffer[1] = pottest;

Das war das ursprüngliche Problem
ERROR: invalid lvalue of assignment operation
Gast #4525576
Lesenswert?
• ▲
▼
Fehlermeldung lesen... du versuchst auf das nicht-existierende attribut 
".potstates" zuzugreifen ...

Außerdem solltest du dir überlegen ob du die werte KOPIEREN oder 
REFERENZIEREN willst...momentan versuchst du das letztere... und dafür 
ist das erste array auch falsch initialisiert ...
Gast #4525577
Lesenswert?
• ▲
▼
TestX schrieb:
> Fehlermeldung lesen... du versuchst auf das nicht-existierende
> attribut
> ".potstates" zuzugreifen ...
>
> Außerdem solltest du dir überlegen ob du die werte KOPIEREN oder
> REFERENZIEREN willst...momentan versuchst du das letztere... und dafür
> ist das erste array auch falsch initialisiert ...

Eh siehe mein Antwortpost. Demnach muss ich das Array mit Schleife 
kopieren?
Gast #4525587
Lesenswert?
• ▲
▼
Ok ich habs im Internet gefunden. Das stichwort war COPY. Manchmal ist 
es in C recht schwer was zu suchen weil die Probleme recht schwer in 
Worte zu fassen sind (ohne da jetzt was ganz generelles zu suchen).
Danke! Gottseimitdir.
Gast #4525605
Lesenswert?
• ▲
▼
Array befüllen ist in C tatsächlich nicht so intuitiv, wie in anderen 
gängigen Sprachen. Du musst wie bereits erkannt die Werte kopieren, und 
dazu eigent sich die Funktion memcpy() sehr gut.

Je nach Hardware ist memcpy() sogar erheblich schneller, als eine 
for-schleife, weil dazu eben spezielle Hardware mit benutzt wird (zum 
Beispiel auf PC's).
Gast #4525627
Lesenswert?
• ▲
▼
@rufus: ich hab naiverweise angenommen dass einfache Mikrocontroller 
memcpy wie eine Schleife übersetzen.

Ich sehe aber ein dass memcpy wohl die bessere Variante ist wenn man 
bedenkt dass man irgendwann auf irgendwas Leistungsfähigeres 
übersiedelt.
Persönliche Seite #4526467
Lesenswert?
• ▲
▼
traumichnichtsagenwerichbin schrieb:
> ich hab naiverweise angenommen dass einfache Mikrocontroller memcpy wie
> eine Schleife übersetzen.

Na, das wird immer passieren. Daß dafür DMA verwendet wird, quasi am 
Prozessorkern vorbei, das ist eher auszuschließen - welcher Compiler 
weiß schon, was DMA ist?

Manche Architekturen haben auf Speicherkopier-/Verschiebeoperationen hin 
optimierte Schleifenbefehle, andere nicht.

Und? Wo ist das Problem? Soll Dein Programm ständig und dauernd 
irgendwelche Blöcke im Speicher herumkopieren?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren