神奇struct的那些事

本文原本创作于2025.02.28,经过些许修改之后发布到此


struct的正常用法

struct student{
	int id;
	int num;
};
struct student STU;

这是最基础的声明,声明了一种数据类型叫做student,它的内部具有的内容是id和num,然后我把struct student用来声明STU,此时STU内部就有两个内容了。


struct的次正常用法

struct student{
	int id;
	int num;
}STU;

这是普通的用法,声明了一种数据类型叫做student,然后在声明的同时直接用struct student声明了STU,和上边的第一种情况是一样的


struct的傻鸟用法(我自己觉得)

struct{
	int id;
	int num;
}STU;

这没有声明一个和之前类似的student数据类型,而是直接把STU作为这个结构体声明出去了,可以正常使用STU来访问内容,例如STU.id,但是如果想重新声明一个新的内容的话,那么就会发现没办法定义,因为没有数据类型student,也就是说我无法像上边一样的去声明struct student STU;


超级彩蛋环节!~

彩蛋一:虽然上边傻鸟写法很无语,但是也有解决方法:外加typedef

这个关键字可以让一些东西重命名,也就是说面对复杂而冗长的struct我们可以使用typedef来让这一坨东西变成简洁好看的样子,而且不失去功能性。


彩蛋二:简洁处理

有没有发现有的时候结构体的使用在别人那里并不复杂,这是因为其实在声明完结构体后,就不用使用
struct了,举个简单的例子(就是第一个内容的代码),正常的结构体声明是这样子的:

struct student{
	int id;
	int num;
};
struct student STU;

但是实际上,别人的写法可能是这样的:

struct student{
	int id;
	int num;
};
student STU;

发现了喵?把struct删了,其实只要不是变量名字重合了,都可以这样子写。看来不使用typedef的原因+1~


彩蛋3(疑似?):坑爹玩法!

还是举第一个的例子:

struct student{
	int id;
	int num;
};
struct student STU;

现在,如果结构体里边只有一个变量,也就是id的话是这样子滴:

struct student{
	int id;
};
struct student STU;  // 代码1

它还有另外一种写法,当结构体内容只有一个的时候,可以将括号省去:

struct student id;

要是我换个名字呢,比如我把id换成STU的名字,然后就出现了:

struct student STU;  // 代码2

于是发现了一个坑!这个时候这句话只是在声明结构体的内容有STU,但是这和之前的 代码1 处不一样了!因为上边 代码1 处的STU可以理解成int a的a,但是下边 代码2 的STU则代表这是结构体内容的一部分,这导致了语义不清,这个时候最好加一个注释(或者干脆别这么写)


最后,要是看官您有独特的见解的话,可以联系我或者在下方评论区留言喵~


作 者:雪崩了...
链 接: https://bolinio.top/?p=194
来 源:bolin的技术厨房
版 权 声 明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议。文章版权归作者所有,未经允许请勿转载!


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇