mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik struktur oder array


Autor: johanndes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi
wann verwenden man eine struktur oder  ein arry
ich hab ein projekt vor mir liegen der alles mit ner struktur gelöst hat
er schreibt dann in die struktur mit ....->.... usw
ich frage mich allerdings ob bei gleichen Dadentyp nicht ein array 
günstiger ist.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
johanndes wrote:
> hi
> wann verwenden man eine struktur oder  ein arry
> ich hab ein projekt vor mir liegen der alles mit ner struktur gelöst hat
> er schreibt dann in die struktur mit ....->.... usw
> ich frage mich allerdings ob bei gleichen Dadentyp nicht ein array
> günstiger ist.

Die Frage macht so keinen Sinn...

Genauso wie "Fahrrad oder Auto?"

Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenn mich mit C nicht so gut aus, aber kann man über structs 
iterieren?
Bei einem array kann man ja bequem per index auf die elemente zugreifen 
und es so in schleifen verwenden. Bei struct greift man ja mit dem 
"elementnamen" auf das element zu, also nicht per index. Ich würde 
sagen, dass ist der unterschied zwischen einem array und einem struct. 
Nachher wird der c-compiler beide vermutlich ähnlich implementieren.

Autor: johanndes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wieso macht die frage keinen sinn
ich habe ja geschrieben das in diesem projekt alles mit einer 
strukturgelöst
wurde
und ich wollte halt mal wissen ob da nicht ein arry besser ist.
da der datentyp immer gleich ist.
mdf

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
johanndes wrote:
> wieso macht die frage keinen sinn
> ich habe ja geschrieben das in diesem projekt alles mit einer
> strukturgelöst
> wurde

Weil prinzipiell eine Struktur etwas anderes ist als ein Array?!

> und ich wollte halt mal wissen ob da nicht ein arry besser ist.
> da der datentyp immer gleich ist.
> mdf

Was heißt "Der Datentyp ist immer gleich"? Wie ist denn die Struktur 
aufgebaut?

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Strukturwerden verwendet, wenn

a) Daten unterschiedlichen Typs oder

b) Daten gleichen Typs, aber unterschiedlicher Funktion

in einer Einheit zusammengafasst werden sollen. Im Fall b) bietet die
Struktur den Vorteil, dass auf die Elemente per Name zugegriffen
werden kann, was den Prgrammcode verständlicher macht.

Array werden verwendet, wenn

gleichartige Daten in einer Einheit zusammengafasst werden sollen. In
vielen Programmiersprachen (darunter C) müssen alle Elemente eines
Array vom gleichen Typ sein. Anstelle der Namen für die einzelnen
Elemente tritt eine Nummerierung, die es erlaubt, in Schleifen über
alle Elemente zu iterieren.

Autor: johanndes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zb struct....


                 buffer->buf[0] = START; //define
     buffer->buf[1] = 0x0C;
     buffer->buf[2] = 0x81;
     buffer->buf[3] = 0x08;
     buffer->buf[4] = ENDE;   //define

das ganze kann man ja auch mit nem array machen
zb
int array[5];
array[0] =START;
array[1] = ...
...
so zum beispiel

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
johanndes wrote:
> zb struct....
>
>
>                  buffer->buf[0] = START; //define
>      buffer->buf[1] = 0x0C;
>      buffer->buf[2] = 0x81;
>      buffer->buf[3] = 0x08;
>      buffer->buf[4] = ENDE;   //define
>
> das ganze kann man ja auch mit nem array machen
> zb
> int array[5];
> array[0] =START;
> array[1] = ...
> ...
> so zum beispiel

Das element "buf" der Struktur ist doch bereits ein Array.

Die Frage ist hier nicht, ob man statt der Struktur (wo ein Array drin 
ist) ein Array benutzen soll, sondern welchen Sinn es macht, um eine 
einzelne Variable ("buf") eine Struktur zu hüllen...

Es kann natürlich auch sein, dass die Struktur "buffer" weitere 
Member-variablen enthält, dann kann man es natürlich nicht so einfach 
ersetzen.

Autor: johanndes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das problem war folgendes das porogramm hat nicht funktioniert.
ich bin nun her und hab die strukt teilweisse durch ein array ersetzt
das beteutet teile der struct laufen ins leere

so das ganze funktioniert nun aber ich frage mich
wieso die leute da überhaupt ne struct vewendet haben

Autor: johanndes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so sieht die struct aus
struct com_buf *p_rx_buffer, rx_buffer = {
            .buf = {},
            .len = 12,
            };

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> struct com_buf *p_rx_buffer, rx_buffer = {
>             .buf = {},
>             .len = 12,
>             };

Wie Simon schon mutmaßte: Die Struktur enthält außer dem Array noch
ein weiteres Element, nämlich die Größe oder den Füllstand des Puffers
(len). Da beide untrennbar zusammengehören (ohne len weiß man gar
nicht, wieviele Elemente des Arrays buf sinnvolle Werte enthalten),
ist eine Struktur hier genau der richtige Datentyp.

Und für die Pufferdaten selbst ist ein Array geeignet, da es sich bei
den Pufferdaten um gleichartige Daten, über die man an anderer Stelle
vielleicht iterieren möchte, handelt.

Autor: johanndes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok soweit schon klar
aber ich habe einige dieser structs entfernt da es nicht funzte
und hab das ganze von fornherein mit nem array gemacht
und das ganze gehet mit nem arry ebenfalls nur eifacher
nun hab ich überlegt was der sinn von dem ganzen zeugs ist

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
johanndes wrote:
> ok soweit schon klar
> aber ich habe einige dieser structs entfernt da es nicht funzte

Was wird denn genau mit dem Struct gemacht, was "funzt" nicht? 
Vermutlich musst du die Structs packen lassen? (Compilerparameter idR)

> und hab das ganze von fornherein mit nem array gemacht
> und das ganze gehet mit nem arry ebenfalls nur eifacher
> nun hab ich überlegt was der sinn von dem ganzen zeugs ist

der sinn ist doch klar: Du hast mit dem Struct die Daten geordnet im 
Speicher. Deine Struct hat einen Parameter für die Länge und einen für 
(Roh-)daten. Wenn du jetzt den Speicherbereich des Structs zum Beispiel 
über das UART (byte für byte) sendest, hast du eine Art "Protokoll". Die 
Länge ist gewissermaßen der Protokollheader, die Daten sind die 
Protokolldaten.

Du kannst (in diesem Falle) natürlich auch ein Array mit der gleichen 
Größe wie das Struct machen und die Daten hierraus senden - ist aber 
weniger übersichtlich und weniger komfortabel. (Zum Beispiel wenn du auf 
die Länge zugreifen willst)

Ich bevorzuge die Version mit dem Struct bei solchen Sachen.

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.