认识C语言 Day_10 > 认识结构体

简介: 认识C语言 Day_10 > 认识结构体

1.结构体类型的声明

1.1结构的基础知识

结构是一些值的集合,这些值称为成员变量

结构的每个成员可以是不同类型的变量

1.2结构的声明

structtag

{

       member-list;

}variable-list;

tag:自定义的结构体类名(可以根据实际情况命名)

member-list:成员变量的列表

variable-list:变量列表

为什么要出现结构体?

当前学习过的类型都是内置类型,比如char,int,short等,这些类型都是孤立的,单独用一种类型无法描述复杂的对象;比如要描述一个人:

人:名字+性别+年龄+电话+地址

人就是一个复杂对象,C语言引入了结构体来描述这种复杂对象

假设我们需要描述一个学生,我们需要创建一个学生类型,用学生类型创建一个学生变量,这个学生变量里存放学生的属性信息

这就是我们声明的一个结构体类型 ,当我们有了类型之后,就可以创建学生变量

这是一种创建方式,还有另外一种创建变量的方式

这里的s1,s2和s3,s4一样,都是结构体变量

区别在于:s3,s4是全局变量;s1,s2是局部变量

这种方式,在main函数中创建变量的时候不能省略struct关键字

我们用这种方式,在mian函数中创建变量的时候就可以省略struct关键字

1.3结构体成员的类型

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

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

2.1定义变量

我们举个例子:

2.2结构体初始化

3.结构体成员访问

结构体变量访问成员

结构体变量的成员是通过点操作符(.)访问的,点操作符接受两个操作数

  • 结构体变量 . 变量名

例如:

我们可以看到s有成员name和age;

那我们该如何访问s的成员?

struct S s;
strcpy(s,name, "zhangsan");//使用.访问name成员
s.age = 20;//使用.访问age成员

结构体指针访问指针变量的成员

有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针

那该如何访问成员,如下

  • 结构体指针->成员名

4.结构体传参

结构体传参分为 :

  • 结构体传参(传结构体)
  • 结构体地址传参(传地址)

这里我们建议使用传地址,传地址的效率更高

原因是:

函数传参的时候,参数是需要压栈的

如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降

结论:

结构体传参的时候,尽量穿结构体的地址

5.结束

那么今天的学习就到这里咯,今天我们学习了结构体的知识

小杜跟各位小伙伴在一起成长,祝我们都能成为大牛!

                                                                                                                               //小杜的成长之路

相关文章
|
2月前
|
存储 C语言
如何在 C 语言中实现结构体的深拷贝
在C语言中实现结构体的深拷贝,需要手动分配内存并逐个复制成员变量,确保新结构体与原结构体完全独立,避免浅拷贝导致的数据共享问题。具体方法包括使用 `malloc` 分配内存和 `memcpy` 或手动赋值。
45 10
|
2月前
|
存储 大数据 编译器
C语言:结构体对齐规则
C语言中,结构体对齐规则是指编译器为了提高数据访问效率,会根据成员变量的类型对结构体中的成员进行内存对齐。通常遵循编译器默认的对齐方式或使用特定的对齐指令来优化结构体布局,以减少内存浪费并提升性能。
|
2月前
|
编译器 C语言
共用体和结构体在 C 语言中的优先级是怎样的
在C语言中,共用体(union)和结构体(struct)的优先级相同,它们都是用户自定义的数据类型,用于组合不同类型的数据。但是,共用体中的所有成员共享同一段内存,而结构体中的成员各自占用独立的内存空间。
|
2月前
|
存储 C语言
C语言:结构体与共用体的区别
C语言中,结构体(struct)和共用体(union)都用于组合不同类型的数据,但使用方式不同。结构体为每个成员分配独立的内存空间,而共用体的所有成员共享同一段内存,节省空间但需谨慎使用。
|
2月前
|
编译器 C语言 C++
C语言结构体
C语言结构体
28 5
|
2月前
|
C语言
C语言结构体链式结构之有头单链表
文章提供了一个C语言实现的有头单链表的完整代码,包括创建链表、插入、删除和打印等基本操作。
31 1
|
2月前
|
C语言
初识C语言6——结构体
初识C语言6——结构体
18 3
|
2月前
|
存储 编译器 C语言
【C语言】探索结构体基础知识:简明概要
【C语言】探索结构体基础知识:简明概要
|
2月前
|
编译器 Linux C语言
C语言 之 结构体超详细总结
C语言 之 结构体超详细总结
21 0
|
2月前
|
存储 编译器 Linux
深入C语言:探索结构体的奥秘
深入C语言:探索结构体的奥秘