在C语言中,可以使用联合体(union)来解决该问题。联合体是一个结构类型,它的所有成员占用同一个存储空间。这里,我们可以使用联合体来定义具有相同存储空间但属性不同的结构体。
下面是示例代码:
#include
#include
typedef union {
struct {
int num;
char name[20];
} student;
struct {
int id;
char title[30];
float price;
} book;
} data;
void broadcast(data d) {
printf("broadcasting data ...\n");
if (d.student.num != 0) {
printf("Student:\n");
printf("Number: %d\n", d.student.num);
printf("Name: %s\n", d.student.name);
} else if (d.book.id != 0) {
printf("Book:\n");
printf("ID: %d\n", d.book.id);
printf("Title: %s\n", d.book.title);
printf("Price: %.2f\n", d.book.price);
} else {
printf("Unknown data type.\n");
}
}
int main() {
data d1, d2;
d1.student.num = 1001;
strcpy(d1.student.name, "Tom");
d2.book.id = 101;
strcpy(d2.book.title, "Algorithm");
d2.book.price = 89.9;
broadcast(d1);
broadcast(d2);
return 0;
}
在这个例子中,我们定义了一个包含两个结构体(student
和book
)的联合体(data
)。这两个结构体具有相同的存储空间,但属性不同。
在主函数中,我们创建了两个联合体类型的变量d1
和d2
,并对它们分别初始化为一个学生和一本书。
最后,我们调用broadcast
函数来广播这些数据。在广播函数