www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik struct übertragen in Array


Autor: Markus Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo habe eine Frage wie überträgt amn aus einem struct ein Array auf
eine Variablen array der selben größe?

struct
{int eins;
 int zwei;
 int drei[50];
}zahlen;

int ziffer_drei[50];

Also ich möchte gerne den Inhalt von drei der Variablen ziffer_drei
zuweisen!
Danke für eure Antworten.

Autor: Berti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entweder Pointer oder ne nette for schleife...

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In einer Schleife kopiert man die Werte des einen Feldes in das andere.

for(i=0;i<50;i++) ziffer_drei[i] = zahlen.drei[i];

Interessant wird es, wenn man keine Kopie, sondern mit einer Referenz
(Pointer) arbeitet...

Autor: Markus Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich benutze einen Zeiger auf die unterschiedlichen structs! Also da gibt
es mehrere von ist das ein problem?

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sagen wir es so: Willst du eine Kopie des Array anlegen oder dessen
Werte "nur" ausgeben?

Autor: Markus Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte eine Kopie des struct array's anlegen genau!

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich möchte eine Kopie des struct array's anlegen

Nimm die "for-Schleife" (oder heissen die inzwischen
"for-Abfragen"?)

Autor: Markus Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und das geht auch wenn ich mit einem zeiger arbeite?
brauche glaub ich ein wenig Bespielcode!
MfG Markus

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
memcpy(ziffer_drei,zahlen->drei,sizeof(int)*50);

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"zahlen->drei" ist natürlich verkehrt. Anstatt "zahlen" muss
der Name Deines Pointers stehen.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Und das geht auch wenn ich mit einem zeiger arbeite?

Das eine hat mit dem anderen nichts zu tun.

Wenn du eine struct hast:

struct MeineZahlen {
 int eins;
 int zwei;
 int drei[50];
};

und eine Variable von diesem Datentyp ...

struct MeineZahlen zahlen;

... dann greift man mit der '.' Syntax auf die Elemente von zahlen
zu:

   zahlen.eins = 1;
   zahlen.zwei = 2;

Hat man aber einen Pointer auf so eine Struktur ...

struct MeineZahlen * ptrZahlen;
(ptrZahlen zeigt natürlich tatsächlich auf so eine Struktur)

... dann muss man den Pointer dereferenzieren um an die struct
zu kommen und von dort ein Element auszuwerten:

    (*ptrZahlen).eins = 1;
    (*ptrZahlen).zwei = 2;

die Klammern sind absolut notwendig, da die Operatorenprioritaeten
sondt für eine falsche Interpretation sorgen würden.

Da dieses

    (*ptrZahlen).eins = 1;

aber eine blöde Schreiberei ist, hat man genau für dieses eine
eigene Schreibweise eingeführt, damit man da nicht künstlich
Klammern schreiben muss:

    ptrZahlen->eins = 1;

Das Prinzip ist:
   Pointer->
liefert dir das worauf der Pointer zeigt im Falle einer Struktur.
Und nach dem -> schreibst du dann die Komponente der Struktur
mit der du arbeiten möchtest. Ob das jetzt ein int ist oder
ein Array von int, oder ein string spielt für das Aufsuchen
der Komponente keine Rolle. Erst dann wenn du die Komponente hast

    ptrZahlen->drei

bestimmt die Komponente was man mit ihr anstellen kann. Das hat
aber nichts mit dem Aufsuchweg zu tun, bis man bei der Komponente
angelangt ist.

    ptrZahlen->drei

ist ein Array. Und Arrays kann man in C nicht direkt zuweisen,
sondern man muss das machen was man mit jedem Array machen
muss: Die Array-Elemente einzeln umkopieren oder einen memcpy
benutzen, der auch nichts anderes macht als in einer Schleife
umzukopieren. Nur arbeitet halt ein memcpy auf Byte-Ebene
während einer for-Schleife halt auf der Ebene des Datentyps im
Array angesiedelt wird (bei einem int-Array werden int kopiert,
bei einem double Array werden double kopiert, etc.)

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> (oder heissen die inzwischen "for-Abfragen"?)

Der war gut .-)

Autor: Markus Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke habe verstanden!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.