Gast
#577791
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
|
Anzeige
|
von einer struktur zur nächsten springen
Gast
#577791
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.
Gast
#577803
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.
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
Gast
#577835
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:
Aus diesen Strukturen kann nun eine Metastruktur erzeugt werden
Davon kann ein Array angelegt werden
Und so wird was in dieses Array hineingeschrieben
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.
Gast
#577860
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"
Gast
#577882
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. Antwort schreiben |
Anzeige
|