为什么需要结构体?
为了表示一些复杂的事物,而普通的基本类型无法满足实际需求,如存储全校所有学生的性别,年龄,成绩,班级。。。。。。
什么叫结构体?
把一些基本类型组合在一起形成的一个新的复合数据类型。
如何定义一个结构体(三种)?
struct Student
{
int avg;
float scorr;
}
struct Student
{
int avg;
float scorr;
}std;
struct
{
int avg;
float scorr;
}std;
第一种只定义了一种数据类型,在要使用这个数据结构时,再定义变量;
而二和三直接定义了变量,只能定义一次,不方便以后再定义同一种数据结构的变量,所以推荐使用第一种。
结构体变量的赋值和初始化:
同数组一样,只有在初始化时,才有连续赋值, 定义之后赋值的话只能单独赋值;
struct Student
{
int avg;
float scorr;
}
struct Student st1;
st1.avg = 80;
st1.scorr = 6.6;
如何使用结构体变量中的成员(两种方式):
1、结构体变量名.成员名
2、指针变量名->成员名
指针变量名->成员名 表示指针所指向的结构体变量中的成员,等价于(*指针变量名).成员名,等价于结构体变量名.成员名。
通过函数来控制结构体时,形参的选择:
通过指针的知识,我们知道当在被调函数需要改写主调函数的实参时,应传递指针变量,否则直接传递变量值即可;
但是在控制结构体是,不管须不须要改写实参,都应该传递结构体指针变量,因为结构体变量是复合数据类型,所占字节较大,如果传递结构体变量,那么被调函数的形参同样须要那么大的字节来存储实参发送过来的数据,而使用指针则避免了这个问题,因为指针存放内存地址,始终只占4个字节,使用指针直接对原内存进行操作,不仅减少了内存耗用 ,还提高了执行速度。
结构体变量的运算:
结构体变量不能加、减、乖、除;
但结构体变量可以相互赋值。
为结构体动态分配内存:
struct Student
{
int avg;
float scorr;
}
struct Student *st1;
st1= malloc(sizeof(struct Student));