【前言】
今天看一本书的时候发现原来学过的struct结构体都快忘光了,所以赶紧查了很多资料,现在就来做一下总结吧!
Struct结构体是什么?
我们在定义一个对象的时候,这个对象一定会有很多属性,如果说一个学生,他有姓名,年龄,专业,电话号码,家庭住址等属性,而这些数据的数据类型肯定会有所不同,有的是字符型,有的是整型,有的是浮点型,所以我们不可能单纯的声明一个数组来存放这些数据,因为数组中的字段的数据类型必须一致,这时,我们可以使用结构体来封装不同类型的属性,可是这时候,你会想到什么??没错,就是实体!!回想一下我们在做机房的时候,创建实体的时候使用的是什么??是Class,,那么问题来了!类类型和结构体类型又什么异同呢??
百度关于结构体的定义:在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
Struct声明格式
<span style="font-size:14px;">public struct Student//声明一个结构体类型Student
{
int num;//包括一个整型变量num
char name;//包括一个字符数组name,可以容纳20个字符
char sex;//包括一个字符变量sex
int age;//包括一个整型变量age
float score;//包括一个单精度型变量
}</span>
Struct和Class的异同
相同:
- 都是一种数据结构,都可以包含数据成员和方法成员
- 语法相似
辨析:
比较内容 | 结构 | 类 |
构造函数 | 支持(不能自定义,默认提供,作用是将所有的数据成员置零) | 支持(能自定义) |
析构函数 | 不支持 | 支持 |
变量初始化 | 不支持(private int num = 50 是错误的) | 支持 |
继承 | 不支持(sealed类型) | 支持 |
接口 | 可以实现多个接口 | 可以实现多个接口 |
是否必须使用new运 算符实例化 | 否 | 是 |
实例化时在栈还是堆分配内存 | 栈 | 堆,栈中保存引用 |
该类型的变量可否被赋值为null | 否 | 支持 |
类型 | 值类型 | 引用类型 |
关于赋值
结构类型:值类型,每一个结构都包含一份自己的数据,改变一个变量中的值,不会影响另一个变量的值
类类型:引用类型,当两个变量指向一个对象的时候,改变其中一个值,那么另一个值一定会受到影响,因为他们的引用地址是一样的
什么时候使用结构类型?(转载)
因为结构是值类型,因此在为结构分配内存,或者当结构超出了作用域被删除时,性能会非常好,因为他们将内联或者保存在堆栈中。当把一个结构类型的变量赋值给另一个结构时,对性能的影响取决于结构的大小,如果结构的数据成员非常多而且复杂,就会造成损失,接下来使用一段代码来说明这个问题。
结构和类的适用场合分析:
1、当堆栈的空间很有限,且有大量的逻辑对象时,创建类要比创建结构好一些;
2、对于点、矩形和颜色这样的轻量对象,假如要声明一个含有许多个颜色对象的数组,则CLR需要为每个对象分配内存,在这种情况下,使用结构的成本较低;
3、在表现抽象和多级别的对象层次时,类是最好的选择,因为结构不支持继承。
4、大多数情况下,目标类型只是含有一些数据,或者以数据为主。
【后记】
查了很多资料,理论知识的真正理解,还得在实践中深刻!