Forum: Mikrocontroller und Digitale Elektronik struktur oder array


von johanndes (Gast)


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.

von Simon K. (simon) Benutzerseite


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?"

von Hauke R. (lafkaschar) Benutzerseite


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.

von johanndes (Gast)


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

von Simon K. (simon) Benutzerseite


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?

von yalu (Gast)


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.

von johanndes (Gast)


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

von Simon K. (simon) Benutzerseite


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.

von johanndes (Gast)


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

von johanndes (Gast)


Lesenswert?

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

von yalu (Gast)


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.

von johanndes (Gast)


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

von Simon K. (simon) Benutzerseite


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.