C语言 typedef struct和struct的使用及区别

C语言中,struct用于定义一个新的数据类型,这个数据类型可以包含多个不同类型的成员变量。typedef则用于为已有的数据类型创建一个新的名字,通常用于简化复杂类型或提高代码的可读性。使用 struct 关键字用于定义一个新的结构体类型。定义后,可以使用这个结构体类型来声明变量。

1、使用 struct 定义结构体

当使用 struct 关键字定义结构体时,需要在每次声明该结构体变量时都指定关键字 struct

#include <stdio.h>

// 定义结构体
struct Person {
    char name[100];
    int age;
};

int main() {
    // 使用 struct 关键字声明变量
    struct Person p1;
    p1.age = 30;
    snprintf(p1.name, sizeof(p1.name), "John Doe");

    printf("Name: %s, Age: %d\n", p1.name, p1.age);
    return 0;
}

2、使用 typedef struct 定义结构体

使用 typedef 可以为结构体类型创建一个别名,从而省去每次都要写 struct 关键字的麻烦。

#include <stdio.h>

// 使用 typedef 创建别名
typedef struct {
    char name[100];
    int age;
} Person;

int main() {
    // 直接使用别名 Person 声明变量
    Person p1;
    p1.age = 30;
    snprintf(p1.name, sizeof(p1.name), "John Doe");

    printf("Name: %s, Age: %d\n", p1.name, p1.age);
    return 0;
}

3、区别

使用 typedef struct 通常更简洁,因为不需要每次声明变量时都重复使用 struct 关键字。如果没有 typedef,每次声明变量时都需要写 struct,显得有些冗长。

但使用 typedef 时,类型被别名化,可能会让代码看起来不太直观,特别是对于不熟悉的开发者来说,Point 看起来像一个普通类型,而不是结构体类型。如果没有 typedef,可以立即明确知道 Point 是一个结构体类型。

#include <stdio.h>

// 使用 typedef
typedef struct {
    int x;
    int y;
} Point;

// 没有 typedef
struct PointWithoutTypedef {
    int x;
    int y;
};

int main() {
    // 使用 typedef 声明变量
    Point p1;
    p1.x = 10;
    p1.y = 20;

    // 没有 typedef 声明变量
    struct PointWithoutTypedef p2;
    p2.x = 30;
    p2.y = 40;

    // 打印结果
    printf("p1: x = %d, y = %d\n", p1.x, p1.y);
    printf("p2: x = %d, y = %d\n", p2.x, p2.y);

    return 0;
}

4、常使用 typedef 的原因

C 语言中,typedef 常常和 struct 一起使用,简化代码,使代码更加简洁和易读。避免重复使用 struct 关键字,尤其在处理复杂结构体时。帮助定义抽象数据类型,使其在代码中更易于重用。

推荐阅读
cjavapy编程之路首页