结构和其他数据形式🔨
结构体
结构体是C语言中组织相关数据的核心机制,在Python-C互操作中用于:
- 定义复杂的数据结构
- 与Python类进行映射
- 高效传递多个相关数据
基本结构体定义
// 定义结构体
struct Person {
char name[50];
int age;
float height;
};
// 使用typedef简化
typedef struct {
char name[50];
int age;
float height;
} Person;
// 声明变量
Person p1;
Person *p2 = malloc(sizeof(Person));
结构体初始化和访问
// 初始化
Person p1 = {"张三", 25, 175.5};
Person p2 = {.name = "李四", .age = 30, .height = 180.0};
// 访问成员
printf("姓名: %s\n", p1.name);
printf("年龄: %d\n", p1.age);
// 指针访问
Person *ptr = &p1;
printf("身高: %.1f\n", ptr->height);
结构体嵌套
typedef struct {
int year;
int month;
int day;
} Date;
typedef struct {
char name[50];
Date birthdate;
float salary;
} Employee;
Employee emp = {
.name = "王五",
.birthdate = {1990, 5, 15},
.salary = 8000.0
};
联合体
联合体允许在同一内存位置存储不同的数 据类型,在Python-C互操作中用于:
- 节省内存空间
- 实现变体类型
- 处理网络协议数据
基本联合体
union Data {
int i;
float f;
char str[20];
};
union Data data;
data.i = 10;
printf("data.i: %d\n", data.i);
data.f = 3.14;
printf("data.f: %.2f\n", data.f);
带标签的联合体
typedef struct {
enum { INT, FLOAT, STRING } type;
union {
int i;
float f;
char str[20];
} value;
} Variant;
Variant var;
var.type = INT;
var.value.i = 42;
if (var.type == INT) {
printf("整数值: %d\n", var.value.i);
}
枚举
枚举提供有意义的名称来代替数字常量:
typedef enum {
RED, // 0
GREEN, // 1
BLUE // 2
} Color;
Color c = GREEN;
if (c == GREEN) {
printf("这是绿色\n");
}