#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义Person结构体
struct Person {
char name[50];
int age;
struct Person* next;
};
// 定义Data联合体
union Data {
struct Person person;
float number;
};
int main() {
// 分配内存给Person对象
struct Person* newPerson = (struct Person*)malloc(sizeof(struct Person));
if (newPerson == NULL) {
fprintf(stderr, "内存分配失败\n");
return 1;
}
strcpy(newPerson->name, "张三");
newPerson->age = 30;
newPerson->next = NULL;
// 将Person对象存入Data联合体
union Data data;
data.person = *newPerson;
// 读取联合体中的数据
printf("姓名: %s\n", data.person.name);
printf("年龄: %d\n", data.person.age);
printf("下一个Person指针: %p\n", (void*)data.person.next);
// 释放内存,避免内存泄漏
free(newPerson);
return 0;
}
代码解释:
- 定义结构体和联合体:定义了
Person
结构体包含姓名、年龄和指向下一个 Person
的指针,以及 Data
联合体可以存储 Person
结构体或浮点数。
- 内存分配与初始化:在
main
函数中,使用 malloc
分配内存给 Person
对象,并进行初始化。
- 存入联合体:将
Person
对象存入 Data
联合体。
- 读取数据:从联合体中读取
Person
对象的数据并打印。
- 内存释放:使用
free
释放之前分配的 Person
对象的内存,避免内存泄漏。