C语言之数据结构(DAY31)

一、引用结构体的场景

问题:学籍管理,记录下每个学生的姓名、学号、性别、年龄、分数、地址,

你也许会定义姓名为char型变量、学号为int型变量、性别为char型变量……但是这些变量都是相互独立的,无法将它们联系起来,那怎么样能把这些数据存放在一起呢?

而C语言,允许用户自己建立不同数据类型组合而成的结构型数据,而这个结构型数据称为结构体。组成结构型数据的各个数据,称为结构体的成员

通俗来说:结构体就是用户自己定义的数据结构,允许用户在里面存储不同的数据类型。

二、结构体的声明

声明结构体的一般形式:

struct 结构体名

{

成员表列

};

注意:最后有一个分号

对上述学籍管理的问题,声明一个结构体

struct student //结构体类型名为student
{
    char nam[20];//姓名定义为字符串变量
    int num;//学号定义为整型变量
    char sex;//性别定义为字符变量
    float score;//分数定义为实型变量
    char address[30];//地址定义为字符串变量
};

三、定义结构体类型变量

1.先声明结构体类型,再定义该类型的变量

如上面的程序已经定义了结构体类型名,就可以用它来定义变量。

例如:

struct student student1,student2;结构体变量名为student1和student2

声明结构体类型就是为了后续定义结构体类型变量时,让系统对之分配存储单元。

声明结构体类型就相当于建造一个房子的大框架,定义结构体变量就相当于在房子里摆物件。

根据成员的数据类型,32位的系统会为student1分配一个63个字节的存储单元(20+4+1+8+30=63)。

2.在声明类型的同时定义变量

例如:

struct student 
{
    char nam[20];
    int num;
    char sex;
    float score;
    char address[30];
}student1,student2;

这种定义方法的一般形式:

struct 结构体名

{成员表列

}变量名表列;

这种方法适合用于写小程序,能直观地看见结构体的结构;但在写大程序时,往往要求对结构类型的声明和对变量的定义分开,声明完类型,可以随时定义变量,便于后续维护。

四、结构体变量的初始化

1.在定义结构体变量时,可以对它的成员进行初始化。

例如:

struct student 
{   int num;
    char nam[20];
    char sex;
    float score;
    char address[30];
}student1 = { 10101, "Lihua",'M', 99, "101 Xinhua Road"};

在变量名后的花括号中提供各个成员的值,将10101, "Lihua",'M', 99, "101 Xinhua Road"按顺序分别赋给student1变量中的num,nam[20],sex,score,address[30]

2.引用结构体变量中成员的值,引用方式:

结构体变量名.成员名

例如:student1.num表示student1变量中的num成员。

在程序中,在定义完结构体变量后,再对结构体成员逐一初始化,例如:

struct student stud1;
	stud1.num = 10101;
	strcpy(stud1.name, "Li si");
	stud1.sex = 'M';
	stud1.score = 99;
	strcpy(stud1.address, "1 Haida Road") ;
	printf("%d,%s,%c,%f,%s\n", stud1.num, stud1.name, stud1.sex, stud1.score, stud1.address);

注意:要给字符数组赋值是不能直接赋值的,需要用strcpy函数。

" . "是成员运算符,它在所有的运算符的优先级最高,所以student1.num可以看作是一个整体。

注意:不能通过结构体变量名来输出结构体变量全部成员的值。

printf("%s\n",student1); //error

只能对结构体变量中的各个成员分别进行输入或输出。

3.对结构体变量中部分成员初始化

例如:

struct student1 = {
.name = "Lisi",
.score = 95
};

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值