多个结构的数组

时间:2014-03-25 18:48:24

标签: c arrays struct

我有一个void数组,我想在里面输入结构。

不,我不是那样的意思:

struct pinx
{
  int n;

};
struct pinx *array;

我想要一个像这样的动态数组:

struct data
{
  void **stack;
}exp1;

要使成员具有多个像这些结构一样的结构:

struct student
{
 char flag;
 char name[50];
 int sem;
};

struct prof
{
 char flag;
 char name[50];
 int course;
};

Flag用于告诉程序该特定位置的数组是否具有来自stud或prof。

的结构

也是一张图片,让您更清楚。 enter image description here

我尝试通过向两个结构声明一个数组来将数组与结构连接起来,但它对两个结构都不起作用。

struct student *student_array;
struct prof *prof_array;
exp1.stack = (void *)student_array;
exp1.stack = (void *)prof_array;

1 个答案:

答案 0 :(得分:3)

C提供union类型来处理这种情况。你可以定义一个struct“混合”学生和教授,并保留一个标志,以便你知道它是哪一个:

struct student {
    char name[50];
    int sem;
};
struct prof {
    char name[50];
    int course;
};
struct student_or_prof {}
    char flag;
    union {
        struct student student;
        struct prof prof;
    }
};

union将分配足够的内存以适合其任何一个成员。

现在你可以创建一个student_or_prof数组,填充它,并用它来存储教授和学生的混合物:

student_or_prof sop[2];
sop[0].flag = STUDENT_TYPE;
strcpy(sop[0].student.name, "quick brown fox jumps");
sop[0].sem = 123;
sop[1].flag = PROF_TYPE;
strcpy(sop[1].prof.name, "over the lazy dog");
sop[1].course = 321;