C语言的结构体

结构体

一、前言

1.1 数据类型

基本数据类型:char int float double
构造数据类型:数组,结构体,
指针类型 : 数据类型 *

1.2 数组的特点

int a[10];

1)元素的数据类型相同
2)可以存储大量的数据
3)数据的含义一样
4)数组中数据的元素是没有联系的,是独立的存在

二、结构体

2.1 结构体的特点

如果要记录一个人的成绩、学号、姓名、性别、年龄就要需要多个变量,为了归类这些变量,就要引入结构体。
结构体的特点
1)数据类型可以不同也可以相同
2)也是可以存储大量的数据
3)数据的含义部不相同
4)数据之间有联系

2.2 结构体类型的定义

struct 结构体名
{
成员列表;
};
说明:struct 关键字,表示为结构体类型
结构体名:符合标识符的命名规则,一般大写
成员列表:数据类型 成员名
成员名符合标识符的命名规则

注意:a) 大括号后面的分号一定要写
b) 定义结构体类型时,系统不会分配内存
c) 成员之间用分号
d) 结构体之间可以嵌套,但是必须在使用它之前定义好

结构体类型:struct 结构体名

 struct BIR
 {
 		int year;
 		int month;
 		int day;
 };

 struct STU
 {
  	int num;
  	char name[10];
  	int score;
  	char sex;	
 };

2.3 结构体类型变量的定义

结构体类型变量的定义:
1)在定义结构体类型的同时,定义结构体变量

 struct STU
 {
  	int num;
  	char name[10];
  	int score;
  	char sex;	
 }a;

2)先定义好结构体类型,再定义结构体类型变量

 struct STU
 {
  	int num;
  	char name[10];
  	int score;
  	char sex;	
 };

  struct STU a,b;

3)在定义结构体类型的时候,不加结构体名,直接定义结构体类型的变量

 struct 
 {
  	int num;
  	char name[10];
  	int score;
  	char sex;	
 }a;

4)结构体类型的嵌套

 struct BIR
 {
 		int year;
 		int month;
 		int day;
 }t; 

 struct STU
 {
  	int num;
  	char name[10];
  	int score;
  	char sex;	
  	struct BIR t;
 }a;

2.4 结构体类型变量的初始化

 struct STU
 {
  	int num;
  	char name[10];
  	int score;
  	char sex;	
  	struct BIR t;
 };

  struct STU a={101,"zhangsan",89,'M',{1994,2,1}};
  struct STU a={101,"zhangsan",89,'M',1994,2,1};

注意:结构体类型的变量在进行初始化的时候,不能跳跃式初始化
初始化的时候用大括号{}进行初始化,列表里面的数据用逗号隔开
除了初始化的时候可以对结构体变量整体赋值,其他情况不行
结构体变量与变量之间可以进行整体赋值

struct STU
 {
  	int num;
  	char name[10];
  	int score;
  	char sex;	
  	struct BIR t;
 };	
  struct STU a={101,"zhangsan",89,'M',{1994,2,1}};	
  struct STU b;
  b=a;
  b={}//不合法的

2.5 结构体类型变量的赋值

1)结构体类型变量的引用
变量名.成员名
2)结构体变量的赋值

 		 struct STU b;
 	  	b.num=101;
 	    scanf("%s",b.name);
 	    gets(b.name);
 	    b.t.year=1994;
 	    b.t.month=12;

3)说明:对结构体成员进行赋值的时候,一定要注意成员本身的特性
对于数组来说,在赋值的时候,不能整体赋值,必须采用其他方式
如 scanf("%s",成员)、 gets(成员)
结构体里面有嵌套结构体的时候,要注意一层一层的进入,而且每层都有一个 “.”;

2.6 结构体类型的大小

 	struct BIR
 {
 		int year;
 		int month;
 		int day;
 }t; 

 struct STU
 {
  	int num;
  	char name[10];
  	int score;
  	char sex;	
  	struct BIR t;
 };

结构体类型大小:结构体成员类型所占空间的总和–是单个成员的数据类型所占空间的最大的数据类型(基本数据类型)的整数倍,因为空间的总和所要遵循的是空间对齐。

2.7 结构体数组

1)结构体数组的定义
a) 在定义结构体的同时,定义结构体类型的数组
b) 先定义结构体,在定义结构体类型的数组
c) 在定义结构体的同时不加结构体,定义结构体类型的数组

2)结构体数组的初始化

 struct BIR
 {
 		int year;
 		int month;
 		int day;
 }t; 

struct STU
 {
  	int num;
  	char name[10];
  	int score;
  	char sex;	
  	struct BIR t;
 }; 	
 	 
 struct STU  b[3]={
				{101,"黎明",90,'m',1996,7,8},
				{102,"ling",78,'M',1992,8,9},
				{103,"libfs",98,'F',1994,7,9}
 									};

2)结构体数组的赋值,引用
数组引用成员的方式:数组名[下标].成员名

注意:结构体数组的本质还是数组,那么除了初始化以外,就不能整体赋值

  struct STU  b[3];
  
  b[0].num=101
   gets(b[0].name);
   b[0].sex='m';
   b[0].score=90;

   for(i=0;i<3;i++)
   {
   scanf("")
   }

练习题:3个学生,成绩,有姓名,有学号,有性别,有年月日
数据手动输入,把平均成绩算出来,找出最高的最低的,
并输出信息

三、结构体指针

3.1 结构体指针的定义

a) 在定义结构体的同时,定义结构体类型的指针
b) 先定义结构体,在定义结构体类型的指针
c) 在定义结构体的同时不加结构体,定义结构体类型的指针

3.2 结构体指针的初始化

struct STU  b[3];
struct STU  a;

struct STU  *p=b;
struct STU  *pf=&a;

​ 结构体指针引用成员:
​ (*指针名).成员名
​ 指针名->成员名

四、typedef 类型重定义的关键字

给数据类型取了一个别名,不是创造了一个新类型。
形式:typedef 原来的类型名 新名字
typedef一般放在主函数之前

typedef unsigned int  u32
unsigned int a;
u32 b;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_翩翩少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值