von einer struktur zur nächsten springen

Gast #577803
Lesenswert?
• ▲
▼
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
Persönliche Seite #577830
Lesenswert?
• ▲
▼
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
Gast #577835
Lesenswert?
• ▲
▼
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
Persönliche Seite #577850
Lesenswert?
• ▲
▼
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.



Gast #577860
Lesenswert?
• ▲
▼
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
Persönliche Seite #577878
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
#577913
Lesenswert?
• ▲
▼
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.