4、自定义数据类型

C语言自定义类型

1. 结构体

struct

结构体是C语言中用户自定义的数据类型,它允许用户封装不同类型的数据项。

#include <stdio.h>
#include <string.h>

// 定义一个结构体
struct Student {
    int id;
    char name[50];
    float score;
};

int main() {
    // 创建并初始化结构体变量
    struct Student s1 = {1001, "张三", 85.5};

    // 访问结构体成员
    printf("学生ID: %d\n", s1.id);
    printf("学生姓名: %s\n", s1.name);
    printf("学生成绩: %.1f\n", s1.score);

    // 修改结构体成员
    s1.score = 90.0;
    strcpy(s1.name, "李四");

    printf("修改后的成绩: %.1f\n", s1.score);
    printf("修改后的姓名: %s\n", s1.name);

    return 0;
}

输出结果:

学生ID: 1001
学生姓名: 张三
学生成绩: 85.5
修改后的成绩: 90.0
修改后的姓名: 李四

结构体的特点:

  1. 可以包含多个不同类型的数据项。
  2. 使用点运算符(.)访问成员。
  3. 可以嵌套定义。
  4. 可以作为函数参数和返回值。

2. 联合体

union

联合体是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型。

#include <stdio.h>

// 定义一个联合体
union Data {
    int i;
    float f;
    char str[20];
};

int main() {
    // 创建联合体变量
    union Data data;

    // 使用整型成员
    data.i = 10;
    printf("整型值: %d\n", data.i);

    // 使用浮点型成员
    data.f = 220.5;
    printf("浮点型值: %.1f\n", data.f);

    // 使用字符数组成员
    strcpy(data.str, "C Programming");
    printf("字符串值: %s\n", data.str);

    // 显示联合体大小
    printf("联合体大小: %lu\n", sizeof(data));

    return 0;
}

输出结果:

整型值: 10
浮点型值: 220.5
字符串值: C Programming
联合体大小: 20

联合体的特点:

  1. 所有成员共享同一块内存。
  2. 一次只能使用一个成员。
  3. 大小由最大成员决定。
  4. 用于节省内存,但使用时需要小心。

3. 枚举

enum

枚举是C语言中的一种基本数据类型,用于定义命名整型常量。

#include <stdio.h>

// 定义枚举类型
enum WeekDay {
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
};

int main() {
    // 创建枚举变量
    enum WeekDay today = Wednesday;

    // 使用枚举
    printf("今天是周%d\n", today + 1);

    // 遍历枚举
    for (enum WeekDay day = Monday; day <= Sunday; day++) {
        printf("%d ", day);
    }
    printf("\n");

    return 0;
}

输出结果:

今天是周3
0 1 2 3 4 5 6 

枚举的特点:

  1. 默认从0开始,依次递增。
  2. 可以显式指定枚举常量的值。
  3. 增加代码的可读性和可维护性。
  4. 编译器会将枚举类型当作整型处理。

4. 类型定义

typedef

typedef用于为现有数据类型创建新名称,提高代码的可读性和可移植性。

#include <stdio.h>

// 使用typedef定义新类型
typedef unsigned long ulong;
typedef struct {
    int x;
    int y;
} Point;

int main() {
    // 使用typedef定义的类型
    ulong big_number = 1234567890UL;
    Point p1 = {10, 20};

    printf("大数: %lu\n", big_number);
    printf("点坐标: (%d, %d)\n", p1.x, p1.y);

    // 定义函数指针类型
    typedef int (*MathFunc)(int, int);

    // 示例函数
    int add(int a, int b) { return a + b; }

    // 使用函数指针类型
    MathFunc operation = add;
    printf("10 + 20 = %d\n", operation(10, 20));

    return 0;
}

输出结果:

大数: 1234567890
点坐标: (10, 20)
10 + 20 = 30

typedef的特点和用途:

  1. 简化复杂的声明,如函数指针。
  2. 提高代码可读性。
  3. 方便跨平台开发,隐藏平台相关的实现细节。
  4. 常用于为结构体、联合体等复杂类型创建简洁的别名。
  • 10
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值