冰冰学习笔记:结构体初阶

一、结构体的声明

什么是结构体?

在c语言中存在各种类型的变量,但是这些类型只能单一的表示某一种类型,无法表示复杂的类型。

例如,遇到一个学生,不能简单的将其定义为char,int等类型,描述一个学生往往需要各种类型结合起来,比如用字符类型表示的名字,用整形类型表示的学号,用浮点数类型表示的成绩等等。

因此就需要自定义一个复杂类型,将其全部包含,所以就需要结构体来做到这件事情。

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

1.1 结构的声明、类型

struct tag

{

成员类型序列;

}变量序列;

当然也可以进行简化

利用typedef将结构体重新命名为一个简单的名字

这里的student就代表上面struct stu中所包含的所有信息。在进行运用时可以直接使用student

注意:分号不能丢失

结构体成员的类型可以是标量,数组,指针。甚至是其他结构体。

1.2 结构体变量的定义和初始化

结构体定义有两种:

(1)声明类型的同时定义变量p1

(2)定义结构体变量p2

 

结构体初始化:

定义变量后进行初始化

 二、结构体成员的访问

2.1 点(.)操作符和箭头(->)操作符

点操作符只能用于结构体变量进行访问

箭头操作符则应用与结构体指针 

2.2结构体变量的更改

 注意:字符更改运用strcpy()库函数

 三、结构体传参

struct stu
{
	char name[20];
	int ID;
	int age;
	float arr[10];//两门成绩
	struct point s;//座位号

};
 void print1(struct stu t)
 {
	 printf("%s\n", t.name);//打印名字
	printf("%d\n", t.ID);//打印学号
	printf("%d\n", t.age);//打印年龄
	printf("%f %f\n", t.arr[0], t.arr[1]);//打印成绩
	printf("%d %d\n", t.s.x, t.s.y);//打印座位
 }
 void print2(struct stu * t)
 {
	 printf("%s\n", t->name);//打印名字
	 printf("%d\n", t->ID);//打印学号
	 printf("%d\n", t->age);//打印年龄
	 printf("%f %f\n", t->arr[0], t->arr[1]);//打印成绩
	 printf("%d %d\n", t->s.x, t->s.y);//打印座位
 }

 int main()
 {
	 struct stu t1 = { "李四",10086,20,{58.2,70.5},{1,2} };
	 print1(t1);//传值
	 print2(&t1);//传址
	 return 0;
 }

 在结构体进行传参时,如果采用的是传值,将会对其多一份临时拷贝,若结构体过大,参数压栈的的系统开销比较大,会导致性能的下降。

因此我们在传参的时候优先采用传地址,用地址去寻找结构体变量,便不会产生多余的临时拷贝。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

bingbing~bang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值