目录
结构体(Struct)
定义结构体
声明和初始化结构体变量
访问结构体成员
嵌套结构体
指向结构体的指针
共用体(Union)
定义共用体
声明和使用共用体
重定义(Typedef)
定义类型别名
使用类型别名
枚举(Enum)
定义枚举
声明枚举变量
枚举的值
示例程序
结构体(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;
}