本文原本创作于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则代表这是结构体内容的一部分,这导致了语义不清,这个时候最好加一个注释(或者干脆别这么写)
最后,要是看官您有独特的见解的话,可以联系我或者在下方评论区留言喵~