结构体的声明和定义

结构体的声明

结构体的语法:

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;

有兴趣的话可以去试试,编译时出现报错。
原因:
编译器会把上⾯的两个声明当成完全不同的两个类型(即便两个结构体的成员时一模一样的),所以是⾮法的。匿名的结构体类型,如果没有对结构体类型重命名的话,基本上只能使⽤⼀次。

其他情况使用匿名的结构体时有时也会出现报错,比如结构体还可以用做链表的结点。
所以建议尽量不用匿名结构体。

------------------------------------------------------------------分隔符
本次介绍完毕,感谢个伪观看。
有错请指正,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值