【结构体】 结构体引用、结构体数组指针、包含结构的结构体

目录

一、概念、变量的定义

初识结构体

结构体变量的定义、引用结构体类型的初始化

二、结构体的数组

 认识结构体数组

初始化结构体数组

三、结构体指针

初识结构体指针

指向结构体数组的指针

结构体作为函数参数

1.使用结构体变量作为函数参数

2.使用指向结构体变量的指针作为函数参数

3.使用结构体变量的成员作为函数参数

四、包含结构的结构


一、概念、变量的定义

初识结构体

       结构体顾名思义是一种构造类型,它是由若干个“成员”组成,其中的每个成员可以是基本类型的,也可以是构造类型的。如下图:

 

       想要使用结构体,像函数一样,首先我们要做的就是对结构体的声明。声明结构体的格式有三种:

struct Fruit {
	char name[5];
	char colar[5];
	char origin[5];
	int price[5];
};



struct {
	char name[5];
	char colar[5];
	char origin[5];
	int price[5];
};



struct Fruit {
	char name[5];
	char colar[5];
	char origin[5];
	int price[5];
}fruit1;

结构体变量的定义、引用结构体类型的初始化

      声明Fruit的结构体就是先声明结构体类型,再用struct Fruit定义结构体变量。

      引用结构体的形式是:结构体变量名 . 成员名      fruit . cName="apple";

       struct 结构体名{ 

       成员列表

struct Fruit {
	char name[5];
	char colar[5];
	char origin[5];
	int price[5];
}fruit1 = { "apple","red","ShanDong",10; }                //可以在定义结构体变量时指定初始值。

二、结构体的数组

 认识结构体数组

当我们要存储多种水果的信息时,我们就需要用到结构体指针了。

定义一个结构体数组的方式与定义一个结构体变量的方式相同,只是将结构体变量替换成结构体数组。格式:

struct Fruit {
	char name[5];
	char colar[5];
	char origin[5];
	int price[5];
}fruit1[5];

同样的我们也可以先声明结构体类型,在当以结构体数组。


初始化结构体数组

同样的,在我们初始化结构体数组的时候,我们是如下格式:

struct Fruit {
	char name[5];
	char colar[5];
	char origin[5];
	int price[5];
}fruit1[5] = {{ "apple","red","ShanDong",10; },
             { "pear","yellow","ShanDong",9; },
             { "banana","yellow","GuangXi",20; },
             { "mango","yellow","GuangDOng",15; },
             { "lemon","yellow","ShanDong",11; }};

三、结构体指针

初识结构体指针

        当我们想用其他函数来处理结构体时,我们就需要用到结构体指针了。定义结构体指针的格式如下:

结构体类型 *指针名;

struct Fruit *fruit1;

引用它的方法有两种:

(*fruit) . price=10;/*成员名,*fruit一定要带括号,因为点运算符的优先级时最高的,如果不使用括号,就会先执行点运算,再执行*运算*/



(*fruit)->price=10; //成员名,->就像是指针的图案,非常容易记忆

注:*fruit一定要带括号,因为点运算符的优先级时最高的,如果不使用括号,就会先执行点运算,再执行*运算


指向结构体数组的指针

       指针指向结构体数组时,指针变量的值就是结构体数组的首地址。

       结构体指针变量也可以直接指向结构体数组中的元素,这时指针变量的值就是该结构体数组元素的首地址。例如,定义一个结构体数组student[2],使用结构体指针指向该数组,代码如下:

​
struct Student* pStruct;
pStruct=student;//第一个元素
pStruct=&student[1];//需要带&符哦!

​

结构体作为函数参数

使用结构体作为函数参数有三种形式:

1.使用结构体变量作为函数参数

       在使用结构体变量作为函数的实参时,采取的是”值传递“方式,他会将结构体所占内存单元的内容全部顺序传递给形参,形参也必须时同类型的结构体变量。

void Display(struct Student stu);

       这种方式不但占用内存多,而且在函数内部修改变量中成员的值,改变的值不会返回到主函数中。

2.使用指向结构体变量的指针作为函数参数

     只将结构体变量的首地址进行传递,并没有将变量的副本进行传递:

void Display(struct Student *stu);

       这样的话,在函数内部修改变量中成员的值,改变的值就会返回到主函数中。


3.使用结构体变量的成员作为函数参数

使用这种方式为函数传递参数与普通的变量作为实参是一样的,采用的是”值传递“的方式!

Display(student.fScore[0]);

注意:在传值时,实参与形参的类型要一致哦!


四、包含结构的结构

       这个顾名思义就时结构里的结构,就像是一个电脑,它由很多硬件组成,cpu、主板、硬盘之类的,这算是一层结构,而在每个成分又包含着结构,就像是cpu就是由寄存器、控制器、运算器和时钟组成。

今天的结构体就到这里:)

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值