Pergunta

Aqui está um dos meus arquivo de cabeçalho que consiste em um modelo de união com 4 diferentes estruturas.

#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;

O meu objectivo é obter um nome de pessoa e de género e armazenar a pessoa é qualquer 3 ancestrais do sexo masculino / feminino acordo com o status de gênero e estado civil da pessoa como segue ..

Quer dizer que MAX terá 3 membros e cada um vai ter 3 antepassados. Estes antepassados ??será determinado pelo gênero do membro correspondente como as seguintes condições:

  • se do sexo masculino, em seguida, usar struct male
  • se do sexo feminino uso solteira struct unmarry
  • se do sexo feminino utilização casado struct marry

struct name é para o nome do membro e gênero para o qual temos de tomar ancestrais e aponte o *ptr_ancestor ao correspondente ancestral array (ancestormale ou ancestorfemale).

O objeto na memória é uma união. Está bem. Meu programa terá uma série de sindicatos, de fato. Cada elemento da matriz pode ser através de uma estrutura diferente na união. Aqui devemos ter cuidado em atribuir o ponteiro ou então podemos perder nossos registros pessoa mais velha em tempo de execução.

Se possível, por favor me diga como obter os detalhes do primeiro elemento ie. original[0] mesmo depois de tomar o original[1]. Aqui eu estou apenas começando o último elemento da matriz, e todos os registros anteriores são ido em tempo de execução. Eu não estou usando quaisquer outras estruturas de dados ou arquivos.

O meu ambiente é Turbo C no Windows.

Outras dicas

Você pode ser mal-entendido a propósito de uma união.

A união é normalmente usado para armazenar um item que pode estar em uma das várias formas. Por exemplo:

// 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");

A diferença fundamental entre um struct e uma union é que uma struct é um agregado de muitas peças de dados, mas um union é uma overlayment : você só pode armazenar um dos elementos, porque todos eles compartilham a mesma memória. No exemplo acima, cada elemento na matriz employees[] consiste de 10 bytes, que é a menor quantidade de memória que pode conter quer 10 chars ou 1 int. Se você faz referência o elemento name, você pode armazenar 10 chars. Se você faz referência o elemento serialNum, você pode armazenar 1 int (digamos 4 bytes) e não pode acessar os restantes 6 bytes.

Então eu acho que você quer usar diferentes, estruturas separadas para representar os membros da família. O que parece que você fez para ser cramming vários pinos quadrados em uma tarefa de casa rodada. : -)

Nota para os leitores avançados: por favor não mencionar preenchimento e alinhamento palavra. Eles provavelmente estão cobertos no próximo semestre. : -)

Você sabe o que significa união em C? Sua união não tem 3 membros. Sua união tem 4 membros. Entre os 4 membros, quantos você quiser armazenar valores em?

Por que não perguntar ao seu TA?

scroll top