C语言中的type struct 和struct区别

typedef structstruct 在 C 和 C++ 中的区别主要体现在命名结构体类型的方式上。为了更好地理解,我们先分别解释这两种用法。

1. struct 的用法

在 C 中,如果只用 struct 定义一个结构体类型,每次使用这个结构体时,都需要带上 struct 关键字。例子如下:

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

int main() {
    struct Person p1;
    p1.age = 25;
    return 0;
}

在这个例子中,Person 是通过 struct 定义的结构体,但在使用时,仍然需要用 struct Person 来声明变量。这种方式使代码显得有点冗长。

2. typedef struct 的用法

typedef 可以用来为现有的数据类型创建一个新的别名。当与 struct 结合使用时,我们可以省略在使用结构体时的 struct 关键字。例子如下:

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

int main() {
    Person p1;
    p1.age = 25;
    return 0;
}

在这个例子中,我们使用 typedef 给结构体创建了一个别名 Person,这样在以后声明变量时,直接使用 Person 而不用再写 struct Person

这两个 typedef 声明看起来相似,但它们的结构和使用略有不同。下面我来详细解释这两种用法的区别:

第一种:typedef struct { int x; int y; } Point;

typedef struct {
    int x;
    int y;
} Point;

  • 解释:这是一个匿名结构体的定义,且使用 typedef 为它定义了别名 Point
  • 匿名结构体:因为没有给结构体本身命名(没有写 struct Name),只能通过 Point 来引用它,无法通过 struct 关键字来使用。

使用示例:

Point p1; // 正确,直接使用 Point
p1.x = 10;
p1.y = 20;

在这种情况下,Point 是唯一的引用方式,不能通过 struct 来访问这个结构体。

第二种:typedef struct Point { int x; int y; } Point;

typedef struct Point {
    int x;
    int y;
} Point;

  • 解释:这是一个命名结构体的定义,Point 既是结构体的名字,也是通过 typedef 定义的别名。
  • 命名结构体:除了可以通过 Point 来引用该结构体之外,还可以使用 struct Point

使用示例:

Point p1;          // 正确,直接使用 typedef 定义的别名
struct Point p2;   // 也正确,可以使用 struct Point
p1.x = 10;
p2.y = 20;

在这种情况下,你既可以用 Point 作为别名,也可以通过 struct Point 来引用这个结构体。

区别总结:

  • 第一种方式定义了一个匿名结构体,并通过 typedef 给它取了一个名字 Point,只能通过 Point 来访问它。
  • 第二种方式定义了一个命名结构体 struct Point,并通过 typedef 给它一个别名 Point,可以通过 struct PointPoint 来访问。

什么时候使用哪一种?

  • 如果你不关心结构体名称,只需要一个简化的别名,第一种方法可以让代码更简洁。
  • 如果你希望既能通过 struct 关键字访问结构体,又希望使用一个简化的别名,第二种方法更灵活。

#算法初学习#
algorithm note 文章被收录于专栏

记录在newcoder刷题找工作的点点滴滴

全部评论

相关推荐

练习JAVA时长两年半:qps 30000
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客企业服务