C语言 自定义类型全面系统理解

C语言自定义类型全面系统理解

在C语言中,我们可以通过定义自己的类型来方便地操作数据。这些自定义类型可以是结构体、枚举、联合等等。本文将详细介绍各种自定义类型的用法和注意事项。

结构体

结构体是一种用户自定义的数据类型,将不同的数据类型打包成一个整体。结构体的定义如下:

struct 结构体名 {
    数据类型1 成员变量名1;
    数据类型2 成员变量名2;
    // ...
};

定义一个结构体后,我们可以定义该结构体类型的变量,并对其成员变量进行操作。以下是一个使用结构体的示例:

#include <stdio.h>

struct student {
    char name[20];
    int age;
    double score;
};

int main() {
    struct student stu;
    scanf("%s%d%lf", stu.name, &stu.age, &stu.score);
    printf("Name: %s\n", stu.name);
    printf("Age: %d\n", stu.age);
    printf("Score: %.2lf\n", stu.score);
    return 0;
}

在上面的示例中,我们定义了一个结构体student,包含了姓名、年龄和分数三个成员变量。在主函数中,我们定义了一个类型为student的变量stu,并使用scanf()函数从标准输入流中读入了三个值,分别赋给了stu的三个成员变量。最后,我们使用printf()函数将stu的三个成员变量输出。

枚举

枚举也是一种用户自定义的数据类型,枚举类型是由一些常量和对应的值组成的。枚举的定义如下:

enum 枚举类型名 {
    标识符1 = 常量表达式1,
    标识符2 = 常量表达式2,
    // ...
};

定义了一个枚举类型后,我们可以定义该类型的变量,并将其赋值为枚举类型中定义的常量。以下是一个使用枚举的示例:

#include <stdio.h>

enum weekday {
    Monday = 1,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday,
};

int main() {
    enum weekday day;
    scanf("%d", &day);
    switch (day) {
        case Monday:
            printf("Today is Monday\n");
            break;
        case Tuesday:
            printf("Today is Tuesday\n");
            break;
        case Wednesday:
            printf("Today is Wednesday\n");
            break;
        case Thursday:
            printf("Today is Thursday\n");
            break;
        case Friday:
            printf("Today is Friday\n");
            break;
        case Saturday:
            printf("Today is Saturday\n");
            break;
        case Sunday:
            printf("Today is Sunday\n");
            break;
        default:
            printf("Invalid Input\n");
            break;
    }
    return 0;
}

在上面的示例中,我们定义了一个枚举类型weekday,并初始化了其中的每个常量的值。在主函数中,我们定义了一个类型为weekday的变量day,并通过scanf()函数从标准输入流中读入一个整数,将其赋值给了day。根据day的值,我们使用switch语句输出了对应的星期几。

联合

联合也是一种用户自定义的数据类型,它可以看作是一种特殊的结构体,只不过它的成员变量是共享同一块内存的,同一时刻只能存储其中的一个成员变量值。联合的定义如下:

union 联合类型名 {
    数据类型1 成员变量名1;
    数据类型2 成员变量名2;
    // ...
};

定义了一个联合类型后,我们可以定义该类型的变量,并对其成员变量进行操作。以下是一个使用联合的示例:

#include <stdio.h>

union test {
    int i;
    char c[4];
};

int main() {
    union test t;
    t.i = 0x12345678;
    printf("t.i = 0x%x\n", t.i);
    printf("t.c[0] = 0x%x\n", t.c[0]);
    printf("t.c[1] = 0x%x\n", t.c[1]);
    printf("t.c[2] = 0x%x\n", t.c[2]);
    printf("t.c[3] = 0x%x\n", t.c[3]);
    return 0;
}

在上面的示例中,我们定义了一个联合类型test,其中包含了一个整型成员变量i和一个字符数组成员变量c。在主函数中,我们定义了一个类型为test的变量t,将其成员变量i的值初始化为0x12345678。然后,我们使用printf()函数输出了t的整型成员变量i以及字符数组成员变量c的各个元素的值。可以发现,字符数组成员变量c的值和整型成员变量i的二进制表示是一样的,这是因为它们共用同一块内存。

总结

通过本文的介绍,我们可以了解到结构体、枚举和联合这三种自定义类型的基本用法和注意事项。在实际编程中,这些自定义类型都有着广泛的应用,可以更加方便地操作数据,提高程序的可读性和可维护性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 自定义类型全面系统理解 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • golang croncli 定时器命令详解

    Golang Croncli定时器命令详解 Croncli是golang中一个用于定时执行任务的命令工具。它允许在固定的时间间隔内运行特定的命令或任务。本文将详细介绍croncli的使用方法,并提供两个示例说明。 安装 Croncli可以通过go命令来安装: $ go get github.com/robfig/cron/v3 使用 Croncli是通过go…

    C 2023年5月23日
    00
  • 学生成绩管理系统C语言代码实现

    学生成绩管理系统是一个非常典型的C语言应用程序,下面将逐步讲解该系统的完整实现过程。 系统需求分析 首先,我们需要根据需求分析设计系统的功能和流程。在这个例子中,学生成绩管理系统简要需要实现以下功能: 管理员可以输入多个学生的基本信息,包括姓名、学号、班级等。 管理员可以为每个学生输入多门学科的成绩。 管理员可以查看每个学生的平均成绩和总分数,并且可以查看学…

    C 2023年5月23日
    00
  • C语言使用函数指针

    C语言中,函数指针是指向函数的指针变量。使用函数指针可以让程序具有更高的灵活性和可扩展性,能够更好地适应不同的需求。 1. 声明函数指针 声明函数指针的语法如下: 返回类型 (*指针变量名)(参数列表); 例如: int (*myFunc)(int a, int b); 上述代码中,声明了一个名为 myFunc 的指向返回类型为 int,参数列表为 (int…

    C 2023年5月9日
    00
  • opencv3/C++ PHash算法图像检索详解

    OpenCV3/C++ PHash算法图像检索详解 简介 PHash算法(Perceptual Hash)是一种具有可靠性、兼容性等特点的图像检索技术。它可以在不同分辨率、不同光照、不同色彩值等多种情况下进行图像比较和检索。本篇文章将以OpenCV3和C++语言为基础,详细讲解如何使用PHash算法进行图像检索。 安装OpenCV OpenCV是一个开源计算…

    C 2023年5月22日
    00
  • 教你分辨C++堆与栈的区别

    分辨C++堆与栈的区别是每个C++编程学习者在学习过程中都需要掌握的重要知识点。在这里,我将会给大家提供一份完整攻略,以帮助大家更好地学习和理解这个概念。 什么是堆和栈 在C++中,堆和栈都是存储数据的地方。其中,栈是由系统自动分配和释放的,它是一块用于临时存储数据的内存空间。而堆则是由开发人员手动分配和释放的用于存储数据的内存空间。 堆和栈的区别 内存释放…

    C 2023年5月22日
    00
  • C语言实现返回字符串函数的四种方法

    下面为你详细展开C语言实现返回字符串函数的四种方法的完整攻略。 1. 使用字符串指针 步骤: 定义一个函数,函数返回值为 char * 类型,表示返回一个字符串指针; 在函数内部申请一个指针指向堆内存区域,并在该区域中保存返回的字符串; 返回指针。 示例: #include <stdio.h> #include <stdlib.h> …

    C 2023年5月23日
    00
  • 基于C语言实现http下载器

    下面是基于C语言实现http下载器的完整攻略: 1. 准备工作 要实现一个基于C语言的http下载器,需要进行如下准备工作: 1.1 确定要下载的文件 要下载的文件应该是什么,需要事先确定好。可以通过在浏览器上访问该文件的url,复制浏览器中的url地址,保存到一个文件中。 1.2 了解http协议 http协议是一种应用层协议,规定了浏览器和服务器之间的通…

    C 2023年5月23日
    00
  • 玩转宏定义——从入门到进阶

      宏定义是什么   宏定义(macro definition)是 C/C++ 中的一种预处理指令,可以在编译之前替换源代码中的一些文本。简单来说就是用宏自定义了一些其它符号,这些符号在使用时全等于被替换的内容。 #define  DATE    “2023_01_20” #define  FILE_NUM  250 上面两个例子中表现的就是宏定义的基本格式…

    C语言 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部