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刷题找工作的点点滴滴

全部评论

相关推荐

头像
02-21 16:31
长沙理工大学
大家好,今天分享一个很贴合目前校招时间段的提问:Up你好,本人双非本科大四,软件工程专业。大学前两年因为感觉前端好学,岗位也多选择学习前端。但那时比较懒散,课也多,所以前端也没有学多好。后来互联网寒冬,觉得出去不好找工作。就在大三下开始准备考研,但在去年10月份放弃考研(因为家里的一些事故,一个半月没有复习考研),处理好后,剩70多天感觉考不上值得上的学校。所以干脆准备就业,但感觉前端这个方向特别凉,于是换成了Linux c++方向(为此拒绝了一个前端实习)10月底到现在复习了c语言,学习了C++语法,特性,包括STL这些。学习了Linux系统编程进程线程,网络编程tcp/udp,多路转接,l...
牛客230000345号:毕业入坑两年,提点参考的东西吧,建议边找边备研,学历才是第一生产力,后期如果你要职业发展,这是最基本的几个了,工作和晋升除了项目经验,不就是比的派个人学历、吹牛能力和一堆头衔了(晋升的话,派系很重要)。 工作方面,不了解服务端,但是你可以看招聘,其实相比来说qt在客户端和服务端都可以用到,而且跨平台兼容性好,而且qt不就是c+++吗(学好c++,用哪个框架都不头痛),qt不只是给你个UI界面,封装的很多东西都是可以借鉴的。看你想去哪个城市,现在长沙软件行情不好,真心建议没上岸可以去深圳看看,长沙这边工资对标深圳砍半(眼泪流下来),长沙不少大一点私企面试的也开始卷学历卷项目(双非泪奔),如果想去国企你要能吹当然也可以(其实国企也就那12%的公积金了,并不稳定,但是稳定穷是肯定的)。 想去好一点的,建议把基础打牢,学历一定要提高(长期发展一定要,国内还是不少地方学历论的),如果有实习期建议能参与公司项目就参与,不然只会被拷打,最好从项目或者demo里把设计模式、指针、特性、模板、多线程实现并发并行、通讯协议、数据库这些基本的学会一部分,建议再学学qml和Linux,最好学一点嵌入式(Linux用在嵌入式板挺多的),掌握一门脚本语言(Python,Python,Python)和git或者svn代码管理,没签合同(不是三方),你还是校招生,校招只有一次(当然也可以说是本科一次,硕士一次,博士一次),用了错过就没有了,好多公司最喜欢招应届生了,一张白纸(又便宜又容易被PUA)。 最后,其实纠结这么多,不如第一份工作就选你最喜欢的编程语言、框架和操作系统,反正都是牛马,也不一定只吃一家喂的草
点赞 评论 收藏
分享
02-05 08:49
已编辑
武汉大学 Web前端
野猪不是猪🐗:36k和36k之间亦有差距,ms的36k和pdd的36k不是一个概念
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务