目录
结构体(Struct)
结构体是一种用户定义的数据类型,可以将不同类型的数据组合在一起。
定义结构体
struct Person {
char name[50];
int age;
float height;
};
声明和初始化结构体变量
struct Person person1;
struct Person person2 = {"Alice", 30, 5.5};
访问结构体成员
strcpy(person1.name, "Bob");
person1.age = 25;
person1.height = 6.0;
printf("Name: %s\n", person1.name);
printf("Age: %d\n", person1.age);
printf("Height: %.1f\n", person1.height);
嵌套结构体
struct Address {
char city[50];
int zip;
};
struct Person {
char name[50];
int age;
float height;
struct Address address;
};
struct Person person3 = {"Charlie", 28, 5.8, {"New York", 10001}};
指向结构体的指针
struct Person *ptr = &person1;
printf("Name: %s\n", ptr->name);
共用体(Union)
共用体和结构体类似,但所有成员共用同一段内存,任一时刻只有一个成员有效。
定义共用体
union Data {
int i;
float f;
char str[20];
};
声明和使用共用体
union Data data;
data.i = 10;
printf("data.i: %d\n", data.i);
data.f = 220.5;
printf("data.f: %f\n", data.f);
strcpy(data.str, "C Programming");
printf("data.str: %s\n", data.str);
重定义(Typedef)
typedef
用于给现有的数据类型起别名,简化代码书写。
定义类型别名
typedef unsigned long ulong;
typedef struct {
char name[50];
int age;
float height;
} Person;
使用类型别名
ulong num = 123456789;
Person person4 = {"Dave", 40, 5.9};
枚举(Enum)
枚举用于定义一组命名的整数常量,增强代码的可读性和可维护性。
定义枚举
enum Color { RED, GREEN, BLUE };
声明枚举变量
enum Color favoriteColor = GREEN;
枚举的值
枚举成员的默认值从0开始递增,可以手动指定值。
enum Color { RED = 1, GREEN = 2, BLUE = 4 };
enum Color anotherColor = BLUE;
printf("Color value: %d\n", anotherColor); // 输出4
示例程序
下面是一个包含结构体、共用体、重定义和枚举的完整示例程序:
#include <stdio.h>
#include <string.h>
// 定义枚举
enum Color { RED, GREEN, BLUE };
// 定义结构体
typedef struct {
char name[50];
int age;
float height;
} Person;
// 定义共用体
union Data {
int i;
float f;
char str[20];
};
int main() {
// 使用枚举
enum Color favoriteColor = GREEN;
printf("Favorite color: %d\n", favoriteColor);
// 使用结构体
Person person1 = {"Alice", 30, 5.5};
printf("Name: %s\n", person1.name);
printf("Age: %d\n", person1.age);
printf("Height: %.1f\n", person1.height);
// 使用共用体
union Data data;
data.i = 10;
printf("data.i: %d\n", data.i);
data.f = 220.5;
printf("data.f: %f\n", data.f);
strcpy(data.str, "C Programming");
printf("data.str: %s\n", data.str);
return 0;
}