结构体的声明
结构体的语法:
struct tag
{
member;
}variable;
结构体的声明
声明一个描述一个学生基本信息的结构体:
struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}; //分号不能丢
结构体变量的创建
利用上面的结构体创建一个结构体变量:
方法一
struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
};
int main()
{
struct Stu s;//创建一个变量s,它的本体是一个结构体
}
方法二
struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}s;//在结构体定义后面的分号前直接定义变量s
结构体变量的初始化
初始化结构体某个变量的语法:
struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}s;
int main()
{
s.name="zhangsan";//在结构体变量后面加上“.成员名”
}
顺序初始化
#include <stdio.h>
struct Stu//定义结构体
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
};
int main()
{
//按照结构体成员的顺序初始化
struct Stu s = { "张三", 20, "男", "20230818001" };
printf("name: %s\n", s.name);
printf("age : %d\n", s.age);
printf("sex : %s\n", s.sex);
printf("id : %s\n", s.id);
return 0;
}
乱序初始化
struct InitMember
{
int first;
double second;
char* third;
float four;
};
int main()
{
struct InitMember test = {
.second = 3.141590,
.third = "method three",
.first = -10,
.four = 0.25};
struct InitMember test = {
second : 3.141590,
third : "method three",
first : -10,
four : 0.25 };
return 0;
}
结构体的特殊声明
//匿名结构体类型
struct
{
int a;
char b;
float c;
}x;
struct
{
int a;
char b;
float c;
}a[20], *p;//定义了一个变量数组a和指针变量p
没有明确结构体变量名称。
那么看一下下列这行代码合法吗?
//在上⾯代码的基础上,下⾯的代码合法吗?
p = &x;
有兴趣的话可以去试试,编译时出现报错。
原因:
编译器会把上⾯的两个声明当成完全不同的两个类型(即便两个结构体的成员时一模一样的),所以是⾮法的。匿名的结构体类型,如果没有对结构体类型重命名的话,基本上只能使⽤⼀次。
其他情况使用匿名的结构体时有时也会出现报错,比如结构体还可以用做链表的结点。
所以建议尽量不用匿名结构体。
------------------------------------------------------------------分隔符
本次介绍完毕,感谢个伪观看。
有错请指正,谢谢