CC++中的结构体声明:struct和typedefstruct⽤法
C/C++中的结构体声明: struct 和 typedef struct ⽤法
之前⼀直被C/C++中的结构体的定义弄晕,今天终于认认真真整理了⼀次。
结构体的常规定义与创建
⽆ typedef 的声明⽅式
⾸先常规结构体的定义,你肯定已经⼗分清楚:
struct Person{
int age;
string name;
};
这⾥Person是你声明的这个结构体的名字,即⼀种类型,如同int之类的。
如果你想声明⼏个Person的变量的话有两种⽅式:
// 1. 在声明之后⽴刻创建
struct Person {
int age;
string name;
} person_a, person_b;
// 这⾥ person_a 都是实际的 variables 啦!
// 2. 随后需要的时候再创建,给出C中的定义⽅法
struct Person person_c;
有 typedef 的声明⽅式
在C中,创建结构体都要在前⾯加多⼀个struct,有点累赘。当然,有简单的办法,就是加上⼀个typedef。
typedef struct Person {
int i;
string name;
} Ren;
// 这⾥ Ren 不是 variable, ⽽是⼀个类型名c语言struct用法例子
// 通过这种⽅式声明的结构体就可以较为简洁地创建变量
Ren person_d;
typedef 并没有实际参与到结构体的定义,⽽是仅仅给你创建的结构体起了个外号。在这个例⼦中 struct Person 的外号就是 Ren
其他声明⽅法介绍
上⾯介绍的都是⼗分常规的的声明⽅式,也是推荐使⽤的 best practice。但容易混淆的是⼀些⽐较特殊的声明⽅式中,例如匿名结构体等,实际的效果可能不是那么的直观。
1. 匿名结构体
struct {
int age;
string name;
} p1, p2;
这⾥p1, p2是实际的变量不是变量类型。实际变量类型的变量类型是这个结构体,但这个结构体你没起名字。如果你不在声明后进⾏初始化的话就再也没有机会了。这种适合那种很简单的结构体或者你真的就仅仅⽤这⼀次的结构体。
2. 匿名结构体 + typedef
typedef struct {
int age;
string name;
} Person, Ren;
神奇了,这⾥的Person、Ren和上⾯的p1, p2在⼀个位置,但是Person和Ren是变量类型了⽽不是具体的变量,在⼤部分情况下可以和常规声明的结构体以同样的⽅式使⽤:
Person p;
Ren ren;
虽然这样也算是起了个名字,但是这样声明的结构体不能嵌套,即内部不能包含⾃⼰。
⼀点吐槽:
很多国内的C/C++教材喜欢给你讲各种花⾥胡哨的⽅式,告诉你这样定义也可以那样也可以。但是在实际的⼯作中,代码在能够运作的同时还要⼈能看得懂,所以⼀定要简洁明了,不要⽤太多奇淫技巧。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。