C: array in array of arrays schreiben

Gast #4525565
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
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
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
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
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
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 #4525612
danke für den tipp. Wie finde ich (zb für eine gegebene 
Mikrocontrollerarchitektur) heraus ob memcopy auf Hardwarebefehle 
zurückgreifen kann?
Gast #4525627
@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
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.