1.typedef如何使用

typedef 是 C 语言中的一个关键字,用于为已存在的数据类型定义一个新的名字。这可以提高代码的可读性和可维护性。
下面是一些 typedef 的使用示例:

为基本数据类型定义新类型名

typedef int INT;  // INT 是一个 int 类型的别名
typedef float FLOAT;  // FLOAT 是一个 float 类型的别名

为结构体定义新类型名

typedef struct {
  int x;
  int y;
} POINT;  // POINT 是一个 struct 类型,包含两个 int 成员 x 和 y

为联合体定义新类型名

typedef union {
  int i;
  float f;
  char c;
} UNION_TYPE;  // UNION_TYPE 是一个 union 类型

为枚举定义新类型名

typedef enum {
  RED,
  GREEN,
  BLUE
} COLOR;  // COLOR 是一个 enum 类型

为函数指针定义新类型名

typedef void (*FUNC_PTR)(int, int);  // FUNC_PTR 是一个函数指针类型,指向没有返回值,接受两个 int 参数的函数

使用 typedef 的好处是,可以通过更短或者更具有描述性的名字来表示数据类型,使得代码更加清晰易懂。同时,如果需要更改数据类型,只需要修改定义新类型的那一行,而不需要到处修改使用该类型的变量和函数,从而提高代码的可维护性。

2.结构体和共用体的定义与使用

结构体(Struct)和共用体(Union)是C语言中用于数据结构定义的两种类型,它们允许我们将多个不同类型的数据项组合成一个单一的实体。

结构体

结构体是一种用户定义的数据类型,它允许我们将不同的数据类型组合成一个单一的类型。结构体中的每个成员都可以是不同的数据类型,这使得它非常灵活,可以用来表示现实世界中的对象和事物的属性。
定义结构体的关键字是 struct,后跟结构体的名称和花括号内的成员列表。每个成员都定义了其数据类型和名称。

struct Person {
    char name[50];
    int age;
    float height;
};

使用结构体,我们可以创建该类型的变量:

struct Person person1;
strcpy(person1.name, "Alice");
person1.age = 30;
person1.height = 165.5;

共用体

共用体是一种特殊的数据类型,它的特点是共用一块内存空间。共用体中的所有成员都存储在同一内存位置,因此只能同时有一个成员是非零值。这使得共用体在存储空间有限或者需要不同数据类型之间切换的场景中非常有用。
定义共用体的关键字是 union,后跟共用体的名称和花括号内的成员列表。每个成员的尺寸必须相同,因为它们共享同一片内存。

union Data {
    int i;
    float f;
    char str[20];
};

使用共用体,我们可以通过共用体的名称来访问其成员,但是需要注意,任何时候只能有一个成员被赋予非零值:

union Data data;
data.i = 10; // 设置整型成员
// data.f 将会是 0.0,因为整型成员占据存储空间
data.f = 3.14; // 设置浮点型成员
// data.i 将会是 0,因为浮点型成员占据了存储空间

例:

#include<stdio.h>
    int main() {
        int z;
        union data {
            int x;
            int y;
        }a;
        a.x = 3;
        a.y = 6;
        z = a.x + a.y;
        printf("%d\n",z);
    return 0;
}

image.png

结构体和共用体的使用场景

  • 结构体通常用于表示对象的状态或属性,如一个人的姓名、年龄和身高。
  • 共用体通常用于节省空间,当你需要根据不同的情况存储不同类型的数据,但不需要同时存储多个数据时。
    在使用结构体和共用体时,需要注意内存对齐的问题,它可能会导致实际占用的内存空间比成员数据类型的大小总和要大。这是因为编译器可能会在成员之间插入填充字节(padding)以确保数据在内存中的对齐满足特定的要求。

    3.枚举类型

  • 枚举的概念:枚举就是将某一种变量所有的可能列举出来
  • 枚举的定义:enum 枚举类型名{枚举元素表}枚举变量名
  • 枚举变量的定义:

    • 在定义枚举类型的同时,定义枚举类型的变量
    • 已定义过的枚举数据类型定义枚举变量
    • 格式为:enum 枚举名称 变量名表

    注意:

  • 枚举元素是常量,不能在程序中用赋值语句再对它赋值;
  • 枚举元素作为常量是有值的,编译系统按定义时的顺序使他们具有顺序整数值:0.1.2...;
  • 在定义枚举类型中,可在枚举数据时通过“=”来对枚举元素进行初始化(指定一个整型值),并影响后面枚举元素的值,后继序号以此递增
  • 枚举变量只能取对应枚举类型的枚举元素表中的元素
  • 枚举元素表中的元素有先后次序,可以进行比较

    4.文件

  • 文件指针:C语言系统对文件的操作必须通过一个指向“FILE类型”的指针来实现,我们称这种指针为“文件指针”。
  • 文件位置指针
    C语言规定:每一个文件都必须设置一个位置指针(文件指针)来控制文件的访问位置,其规律如下:

    • 文件打开时指针自动指向文件的开始位置;
    • 每读取一个文件单元内容文件位置指针自动顺序向后移动一定的偏移量(该偏移量的字节有所读单元的数据类型决定)
    • 读到文件的结尾,则文件位置的指针指向一个特殊的位置——EOF
    • 对文件进行顺序写操作时,数据写入到文件位置指针所指向的位置。写入后文件位置指针移动到一个新的位置,等待下一次的写入操作
    • 可将文件位置指针移动到任何位置,实现对文件的随机读写访问
  • 文件的打开——打开文件函数fopen()
    打开文件格式为:FILE *fp; fp=fopen(文件名,使用方式)
    文件名:为包含文件访问路径的文件名字符串
    在C语言中,对文件的操作必须先打开文件。失败则返回null或0
  • 文件关闭函数——fclose
    格式:fclose(文件指针)
    其中的文件指针参数,就是保存打开文件操作数fopen函数返回值的FILE指针变量。关闭文件的含义就是执行fclose()函数,先释放文件指针,后写缓冲区的数据到文件中。当顺利执行了文件关闭操作时,fclose()返回值是0,否则是-1.

波波鱼
4 声望3 粉丝