在C语言中,可以使用联合体(union)来替代结构体的继承依赖的 typedef。下面是一个示例代码:
#include
// 定义基本类型
typedef enum {
TYPE_INT,
TYPE_FLOAT,
TYPE_STRING
} DataType;
// 定义联合体
typedef union {
int intValue;
float floatValue;
char* stringValue;
} Value;
// 定义数据结构
typedef struct {
DataType type;
Value value;
} Data;
// 打印数据
void printData(Data data) {
switch (data.type) {
case TYPE_INT:
printf("Integer: %d\n", data.value.intValue);
break;
case TYPE_FLOAT:
printf("Float: %.2f\n", data.value.floatValue);
break;
case TYPE_STRING:
printf("String: %s\n", data.value.stringValue);
break;
}
}
int main() {
// 创建数据对象
Data data1 = {TYPE_INT, {123}};
Data data2 = {TYPE_FLOAT, {3.14}};
Data data3 = {TYPE_STRING, {"Hello, world!"}};
// 打印数据
printData(data1);
printData(data2);
printData(data3);
return 0;
}
在上述代码中,定义了一个枚举类型 DataType,用于标识数据的类型。然后,使用联合体 Value 定义了 int、float 和 char* 三种不同类型的值,并将其作为结构体 Data 的成员。通过联合体的特性,结构体 Data 可以存储不同类型的值。最后,定义了一个打印函数 printData,根据数据类型打印相应的值。
在主函数中,创建了三个不同类型的数据对象,并通过 printData 函数打印出了它们的值。
注意:使用联合体需要特别小心,因为联合体会共享内存空间,因此在使用时需要确保访问的类型和值是正确的,否则可能会导致数据错误。