hi ich habe in c veschiedenen strukturen angelegt insgesamt 10 stück nun möchte ich mit hilfe einer for schleife die strukturen einzeln nacheinader abarbeiten weis jemand wie das geht? mfg
Hm, Array? Zeig doch mal den Code, ich blick' net so recht, wie das aussehen soll.
code hab ich noch keinen nur so ideen int i; struct { ...} mikrocontroller[i]; struct { ...} mikrocontroller[i+1]; usw und das ganze dann in einer for schleife nacheinander bearbeuten for(i =0 ;i< = 11 ;i++) mikrocontroller[i].bla ... .... also das geht natürlich so nicht geht ist mir klar aber wie macht mans richtig
Wenn "struct {...}" in beiden Fällen gleich ist, dann kannst Du ein Array von Strukturen definieren - und sowas scheinst Du ja vermutlich vorzuhaben.
1 | struct blafusel |
2 | {
|
3 | int laber; |
4 | char schwafel; |
5 | };
|
6 | |
7 | |
8 | struct blafusel meintollesarray[4]; |
9 | |
10 | for (i = 0; i < 4; i++) |
11 | {
|
12 | meintollesarray[i].laber = i; |
13 | }
|
Das ist jetzt nur eine Vermutung - Deine Frage ist so extrem ungenau formuliert, daß es durchaus sein kann, daß ich sie nicht verstanden habe. Literaturhinweis: Kernighan & Ritchie, Programmieren in C, 2. Auflage, Hanser-Verlag
hallo ich glaube das würde sogar funktionieren ich werds mal testen was gäbe es für eine lösung wenn die struct nicht gleich ist? zb struct { ...} mikrocontroller[1]; struct { ...} mikrocontroller[2]; mfg
Das geht so gar nicht, Du deklarierst zwei Arrays mit gleichem Namen. Außerdem ist ein Array mit genau einem Element nicht wirklich sinnvoll ... Da C nicht erst zur Laufzeit Informationen über die verwendeten Variablen erhält, ist es auch nicht möglich, in einem Array gewissermaßen unterschiedliche Strukturen abzulegen. Das ginge nur auf dem platzverschwendenden Weg der Unions und müsste mit einer zusätzlichen Strukturtypkennung garniert werden:
1 | struct bla |
2 | {
|
3 | int fusel; |
4 | };
|
5 | |
6 | struct laberschwall |
7 | {
|
8 | float wasauchimmer; |
9 | };
|
10 | |
11 | struct gurkenhobel |
12 | {
|
13 | unsigned long wert; |
14 | };
|
Aus diesen Strukturen kann nun eine Metastruktur erzeugt werden
1 | enum Typkennung |
2 | {
|
3 | tBla, |
4 | tLaberschwall, |
5 | tGurkenhobel
|
6 | };
|
7 | |
8 | struct Monster |
9 | {
|
10 | enum Typkennung typ; |
11 | union
|
12 | {
|
13 | struct bla sBla; |
14 | struct laberschwall sLaberschwall; |
15 | struct gurkenhobel sGurkenhobel; |
16 | } inhalt; |
17 | };
|
Davon kann ein Array angelegt werden
1 | struct Monster MeinArray[10]; |
Und so wird was in dieses Array hineingeschrieben
1 | MeinArray[4].typ = tGurkenhobel; |
2 | MeinArray[4].inhalt.sGurkenhobel.wert = 12; |
Das ist aber eher von theoretischem Nutzen, da es ineffizient mit Speicher umgeht, wenn die in der Union zusammengefassten Strukturen unterschiedlich groß sind. Auch ist das ganze sehr fehlerträchtig, da vor jedem Zugriff der Typ der nun tatsächlich verwendeten Struktur überprüft werden muss. Ein Datenmodell, das eine derartigen Aufbau erfordert, sollte noch mal überarbeitet werden.
hi ursprünglich wars ja so geplant struct { ...} mikrocontroller1; struct { ...} mikrocontroller2; struct { ...} mikrocontroller3; struct { ...} mikrocontroller4; ............ ich hab nen avr prozessor und an diesem hängen 10 weiter at98c prozessoren verbunden als i2c bus. (das ganze funzt auch) ich möchte nun 10 structs anlegen die dann die daten für die jeweilligen prozesoren enthalten das ganze möchte ich über eine for schleife hinaus schieben aber wie komme ich mit ner for schleufe von mikrocontroller1 zu mikrocontroller2 mfg
Das geht so erst recht gar nicht. In C kann der Name einer Variablen nicht zur Laufzeit bestimmt werden und ebenso ist der Zugriff auf eine Variable mit einem zur Laufzeit generierten Namen nicht möglich. Inwiefern unterscheidet sich denn das, was Du praktischerweise nur durch Punkte andeutest? Unterscheidet es sich denn überhaupt, und wir reden nur aneinander vorbei? Wenn sich die Strukturen unterscheiden, wie stellst Du Dir dann den Zugriff auf die Strukturelemente innerhalb der for-Schleife vor? Mal angenommen, die erste Struktur hat ein Strukturelement a, die zweite aber nicht - was soll dann innerhalb der Schleife damit geschehen? Literaturhinweis: Ein Buch zum Thema "Algorithmen und Datenstrukturen in C"
du hast recht das ist ja auch der grund warum ich hier im forum danach frage bzw ich wäre ja auch für ne andere lösung offen die struktur elemente unterscheiden sich ebenfalls (auch da haste recht) wie würdest du sowas machen? ich hab mir zb gedacht das ich keine struktur verwende sonder ein einfaches feld[i] in den jeweiligen feldern sind dann die daten zum verschieken das wäre allerdings bei 10 proztessoren sehr kompliezeirt
Hm, vielleicht solltest du mal genau beschreiben, was du denn schlussendlich tun willst, denn so ist das alles relativ konfus. edit: Falls du einfach einen Datenstrom hast, den du in verschiedene Strukturen packen willst, je nachdem was es jetzt eben ist, dann ist ein Cast dein Freund. Ist allerdings nicht ganz ungefährlich, im Zweifelsfall schreibt man sich dazu eine entsprechende Funktion, die auch die richtige Byteorder und all das Zeugs berücksichtigt.
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.