2016-11-23 2 views
2

Aus dem folgenden Snippet.Verschachtelte Struktur Verwendung in C

  typedef struct { 
       int Code; 
       int ParentCode; 
      }TypeStudentConfidential; 

      typedef struct { 
       int age; 
       int RollNo; 
       int Rank; 
       char Name[10]; 
      }TypeStudent; 

      typedef struct { 
       char class_name[20]; 
       //XXXXXXXXXXXXXXXXX //How could I declare the TypeClass element here? 
      }TypeClass; 

      int main() 
      { 

       const TypeStudent Stu_Details[] = { 
       { 3, 1, 18, "Mahesh"}, 
       { 3, 1, 7, "Kumar"} 
       }; 

       const TypeStudentConfidential Conf_Details[] = { 
       { 761, 814}, 
       { 124, 562} 
       }; 

       const TypeClass Class_Details[]= { 
       { "Class 10",  Stu_Details}, //struct TypeStudent data 
       { "Class 8",  Conf_Details} //struct TypeStudentConfidential data 
       }; 

       return 0; 
      } 

Fragen:

1) Wie die XXXXXX markiert typedef struct Element

2) zu definieren, wie die von XXXXXX markierte Element Class_Details zuzugreifen

+0

Wir sind keine Überprüfung oder Nachhilfe-Service. Bitte lesen [fragen]. – Olaf

+0

TypeStudent und TypeStudentConfidential sind unterschiedliche Strukturen. Sie sollten die Adresse nicht in einem Zeiger eines anderen Typs speichern. – MayurK

+0

'Jetzt bin ich stecken ....' ist eine ziemlich schwache Problemstellung. Bitte beschreiben Sie das Problem, das Sie haben, z. Kompiliere Fehler oder Laufzeitfehler oder .... BTW: Speichern von 'TypeStudentConfidential' in etwas, das' TypeStudent' erwartet, wird nicht funktionieren. Vielleicht brauchen Sie eine "Union" – 4386427

Antwort

2
typedef struct TypeClass { 
    char class_name[20]; 
    struct TypeStudent* type; 
} TypeClass; 

und

Typeclass a = {"classA", NULL}; 
Typeclass b = {"classB", NULL}; 
a.type = &b; 
printf("%s\n", a.type->class_name); //prints b's classname 

Jetzt zugreifen, wenn Sie XXXXXXXXXX wollen entweder ein TypeStudent OR TypeStudentConfidential (wie Ihr Code snippit scheint darauf hinzudeuten) Sie werden wahrscheinlich eine union, wie so verwenden müssen sein:

#include <stdio.h> 


typedef struct TypeClass{ 
     char class_name[20]; 
     union type { 
       struct TypeStudent* students; 
       struct TypeStudentConfidential* studentConfs; 
     } type; 
} TypeClass; 

typedef struct TypeStudent { 
     int age; 
     int RollNo; 
     int Rank; 
     char Name[10]; 
} TypeStudent; 

typedef struct TypeStudentConfidential { 
     int Code; 
     int ParentCode; 
} TypeStudentConfidential; 

int main() { 
     //TypeClass a[2] = {{"C0", {NULL}}, {"C1", {NULL}}}; 

     TypeStudent studs[2] = {{10, 10, 10, "Joe"}, {5, 5, 5, "Bob"}}; 
     TypeStudentConfidential confs[2] = {{1, 2}, {3, 4}}; 

     TypeClass a[2] = {{"C0", {.students = studs}}, {"C1", {.studentConfs = confs}}}; 

     //a[0].type.students = studs; 
     //a[1].type.studentConfs = confs; 

     printf("%s, %s\n", a[0].type.students->Name, (a[0].type.students + 1)->Name); 
     printf("%i, %i\n", a[1].type.studentConfs->Code, (a[1].type.studentConfs + 1)->Code); 
     return 0; 
} 
+0

danke. Das löst die Frage aus meiner Sicht. Ich benutze das Beispiel mit einem Edit, dh ich habe ** .students = ** und **. StudentConfs = ** – Mahi

+1

bei der Verwendung von etwas ähnliches mit ARM Windows GCC C Compiler, habe ich eine Fehlerreaktion sagen wrt this Beispiel: Dereferenzieren von Zeiger auf unvollständigen Typ für Name in Schülern des Typs TypeStudent – Mahi