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

一、结构体的声明

什么是结构体?

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

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

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

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

1.1 结构的声明、类型

struct tag

{

成员类型序列;

}变量序列;

冰冰学习笔记:结构体初阶_第1张图片

当然也可以进行简化

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

冰冰学习笔记:结构体初阶_第2张图片

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

注意:分号不能丢失

冰冰学习笔记:结构体初阶_第3张图片

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

冰冰学习笔记:结构体初阶_第4张图片

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

结构体定义有两种:

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

冰冰学习笔记:结构体初阶_第5张图片

(2)定义结构体变量p2

 

结构体初始化:

冰冰学习笔记:结构体初阶_第6张图片

定义变量后进行初始化

 二、结构体成员的访问

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

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

冰冰学习笔记:结构体初阶_第7张图片

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

2.2结构体变量的更改

 注意:字符更改运用strcpy()库函数冰冰学习笔记:结构体初阶_第8张图片

 三、结构体传参

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;
 }

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

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

 

你可能感兴趣的:(C语言笔记,学习,c#)