Frage

Dies ist eine meiner Header-Datei, die mit 4 verschiedenen Strukturen einer Vereinigung Vorlage besteht.

#define MAX 3


union family
{
  struct name      /*for taking the name and gender of original member*/
     {
      unsigned char *namess;
      unsigned int gender;
      union family *ptr_ancestor; /*this is a pointer to his ancestors details*/
     }names;

  struct male /*for taking the above person's 3 male ancestors details if he is male*/
     {
       unsigned char husb_names[3][20];
       unsigned char wife_names[3][20];
       unsigned int wife_status[3];
     }male_ancestor;

  struct unmarry /*for taking the above person's 3 female parental ancestors if she is female and unmarried*/
    {
      unsigned int mar;
      unsigned char parental_fem[3][20];
      unsigned int marit_status[3];
    }fem_un;

  struct marry /*for taking 3 parental-in-laws details if she is female and married*/
    {
      unsigned int mar;
      unsigned char in_law_fem[3][20];
      unsigned int in_marit_status[3];
    }fem_marr;

};
extern union family original[MAX]; /*for original person*/
extern union family ancestor_male[MAX]; /*used if he is male for storing his male ancestor details*/
extern union family ancestor_female[MAX]; /*used if she is female*/



extern int x;

Mein Ziel ist es, eine Person Name und Geschlecht und speichern die Person, die alle drei männlichen / weiblichen Vorfahren zu bekommen nach dem Geschlecht der Person und dem Familienstand wie folgt ..

Ich meine, dass MAX 3 Mitglieder haben wird, und jeder wird 3 Vorfahren werden müssen. Diese Vorfahren wird durch das Geschlecht das entsprechende Element wie den folgenden Bedingungen bestimmt werden:

  • , wenn männliche dann verwenden struct male
  • , wenn weibliche ledige Verwendung struct unmarry
  • , wenn weibliche verheiratet Verwendung struct marry

struct name ist für den Mitgliedsnamen und das Geschlecht für die wir Vorfahren nehmen müssen und die *ptr_ancestor zu diesem entsprechenden Vorfahren Array zeigen (ancestormale oder ancestorfemale).

Das Objekt im Speicher ist eine Vereinigung. Okay. Mein Programm wird eine Reihe von Gewerkschaften, in der Tat. Jedes Element der Anordnung kann unter Verwendung einer anderen Struktur in der Einheit sein. Hier sollten wir vorsichtig sein, in den Zeiger zuweisen oder sonst können wir unsere ältere Person Datensätze zur Laufzeit verlieren.

Wenn möglich, bitte sagen Sie mir, wie die Details ersten Elements also zu bekommen. original[0] auch nach dem original[1] nehmen. Hier bekomme ich nur das letzte Element des Arrays und alle vorherigen Datensätze werden zur Laufzeit gegangen. Ich bin keine andere Datenstrukturen oder Dateien.

Meine Umgebung ist Turbo C unter Windows.

War es hilfreich?

Lösung

Sie müssen diese Frage zu Gewerkschaften lesen. Sie wollen etwas mehr wie:

struct family {
    struct name { 
        int gender;
        int married;
        blah
    } names;
    union {
        struct male { blah } male_ancestor;
        struct female_unmarried { blah } female_unmarried_ancestor;
        struct female_married { blah } female_married_ancestor;
    };
}

, dann können Sie family.names.gender testen und family.names.married, welches Mitglied der Union zu bestimmen, zu verwenden.

Andere Tipps

Sie können den Zweck einer Vereinigung sein Mißverständnis.

ist ein Zusammenschluss der Regel zu speichern verwendet ein Element, das in einem von mehreren Formen sein kann. Zum Beispiel:

// Define an array of 20 employees, each identified either by name or ID.
union ID {
    char name[10];   // ID may be a name up to 10 chars...
    int  serialNum;  // ... or it may be a serial number.
} employees[20];

// Store some data.
employees[0].serialNum = 123;
strcpy(employees[1].name, "Manoj");

Der entscheidende Unterschied zwischen einem struct und einem union ist, dass ein struct ist ein Aggregat aus vielen Teilen von Daten, aber ein union ist ein overlayment : Sie können nur speichern ein der Elemente, weil sie alle teilen den gleichen Speicher. In dem obigen Beispiel wird jedes Element im Array employees[] besteht aus 10 Bytes, die die kleinste Menge an Speicher ist, halten kann, entweder 10 chars oder 1 int. Wenn Sie das name Element verweisen, können Sie 10 chars speichern. Wenn Sie das serialNum Element verweisen, können Sie speichern 1 int (etwa 4 Bytes) und kann die restlichen 6 Bytes nicht zugreifen können.

Also ich glaube, Sie unterschiedliche, einzelne Strukturen verwenden möchten die Familienmitglieder zu vertreten. Was haben Sie getan, erscheint mehrere Quadrat Pflöcke in einer Runde Hausaufgabe zu pauken. : -)

Hinweis für fortgeschrittene Leser: bitte Polsterung und Wortausrichtung nicht erwähnen. Sie sind wahrscheinlich im nächsten Semester abgedeckt. : -)

Sie wissen, was Union Mittel in C? Ihre Gewerkschaft hat nicht mehr als 3 Mitglieder. Ihre Vereinigung hat vier Mitglieder. Unter den vier Mitgliedern, wie viele möchten Sie Werte speichern in?

Warum haben Sie Ihren TA nicht fragen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top