Forum: Mikrocontroller und Digitale Elektronik struct array


von Bernd S. (mms)


Lesenswert?

Hallo,

wie kann ich von so einer struct ein struct array anlegen?
1
 
2
struct _strArray {
3
  unsigned int *ID; 
4
  unsigned short Length; 
5
  unsigned short State; 
6
  unsigned short Type; 
7
  void          *pValue; 
8
};
1
struct _strArray StrArray[] = { 
2
    
3
   {NBR_1, LENGTH_11, STRING_1, ... usw},             
4
   {NBR_2, LENGTH_5, STRING_2,  ... usw},              
5
   {.... usw}                                 
6
};

im C-file möchte ich sowas in der richtung haben:
1
struct StrArray Array[10];
-> hier kommt immer die Fehlermeldung "variable Array was declared with 
a never-completed type"


Erreichen möchte ich folgendes: in der struct StrArray sollen die 
Spaltenelemente aufgelistet sein einer Tabelle. Zu jeder Spalte gibt es 
mehrere Variablen, die in der Struct _strArray deklariert sind (wie z.B. 
länge und Spalteninhalt (z.B. String oder Integer in der Spalte 
stehen)).

Insgesamt soll es 10 Reihen geben / also 10 Variablen die während der 
Laufzeit die Tabelle Array[10] füllen sollen.


Leider funktioniert mein Ansatz noch nicht.

main.c
1
struct StrArray *ptr; 
2
ptr = &Array[10]     //ptr soll auf den anfang der tabelle zeigen
3
4
for(i=0; i<10; i++)
5
{
6
  //elemente in der tabelle vordefinieren
7
}

gruß
Bernd

von Uhu U. (uhu)


Lesenswert?

struct _strArray StrArray[] = {
   ...
};

definiert eine Variable StrArray vom Typ _strArray

struct StrArray Array[10];

gebraucht die Variable StrArray als Typ - das geht natürlich 
nicht...

von christian (Gast)


Lesenswert?

Hi,
mit
1
 struct _strArray StrArray[];
legst du keinen typ an, sonder deklarierst eine Variable, die ein array 
ist. Du kannst also direkt auf StrArray arbeiten:
1
struct _strArray {
2
  unsigned int *ID; 
3
  unsigned short Length; 
4
  unsigned short State; 
5
  unsigned short Type; 
6
  void          *pValue; 
7
}; 
8
struct _strArray StrArray[] = { 
9
    
10
   {NBR_1, LENGTH_11, STRING_1, ... usw},             
11
   {NBR_2, LENGTH_5, STRING_2,  ... usw},              
12
   {.... usw}                                 
13
};
14
for(i=0; i<sizeof(StrArray)/sizeof(struct _strArray); i++)
15
{
16
  StrArray[i].Length = 34;
17
}

zu spaet....

von Bernd S. (mms)


Lesenswert?

>struct StrArray Array[10];

>gebraucht die Variable StrArray als Typ - das geht natürlich
>nicht...

danke für deine Erklärung.

Wie kann ich das anders machen? Ich möchte ja ein Array erstellen, 
welches vom Typ StrArray sein soll. Sprich jeder Array-Index von Array[] 
sollte die Elemente die innerhalb der struct StrArray gelistet sind, 
beinhalten.


>zu spaet....

me too - dankeschön...

gruß
Bernd

von Bernd S. (mms)


Lesenswert?

wenn ich es etwas umschreibe
1
typedef struct list_struct {
2
3
   struct StrArray *list; 
4
5
} LIST_STR;

dann kann ich den pointer setzen sowie die Tabelle.

Aber wie kann ich dann genau auf ein Element von StrArray zugreifen?
1
LIST_STR *ptr;
2
LIST_STR LIST_TBL[10]; 
3
 
4
ptr = &LIST_TBL[0]     //ptr soll auf den anfang der tabelle zeigen
5
6
for(i=0; i<10; i++)
7
{
8
  //hier bekomm ich noch einen fehler
9
  ptr->list[0]->Length = 0; 
10
}

gruß
Bernd

von christian (Gast)


Lesenswert?

Arbeite mit der von dir angelegten Variable StrArray.
Die behinhaltet eine Tabelle, wobei jeder Eintrag vom Typ struct 
_strArray ist. Die Anzahl der Einträge hast du in der definition 
festgelegt.

Tipp: http://mindview.net/CDs/ThinkingInC/beta3

von Bernd S. (mms)


Lesenswert?

d.h. wenn ich eine Tabelle anlegen möchte mit jeweils 4x _strArray 
structs muss ich in der StrArray struct 40 einträge vornehmen.

gruß
Bernd

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.