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.
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?"
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.
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
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?
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.
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
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.
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
so sieht die struct aus struct com_buf *p_rx_buffer, rx_buffer = { .buf = {}, .len = 12, };
> 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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.