为什么需要结构体?
为了表示一些复杂的事物,而普通的基本类型无法满足实际要求
什么叫结构体?
把一些基本数据类型组合在一起形成的一个新的复合数据类型,这个叫做结构体
如何定义结构体?
三种定义,建议使用第一种
// 第一种定义,这只是定义了一个新的数据类型,并没有定义变量
Struct Student
{
int age;
float score;
char sex;
};
// 第二种定义
Struct Student2
{
int age;
float score;
char sex;
}st2;
// 第三种定义
Struct
{
int age;
float score;
char sex;
}st3;
怎样使用结构体变量?
赋值和初始化
定义的同时可以整天赋初值,
如果定义完之后,则只能单个赋初值。
如何取出结构体变量中的每一个变量 【重点】
1.结构体变量名 . 成员名
2.指针变量名->成员名 (第二种方式更常用)
指针变量名->成员名 在计算机内部会被转化成
( * 指针变量名 ) . 成员名 的方式来执行
所以说这两种方式是等价的
例子:
struct Student
{
int age ;
float score ;
char sex ;
} ;
int main (void)
{
struct Student st = { 88 , 66.6 , ‘ F ’ }; // 初始化,定义的同时赋初值
struct Student * pst = & st;
pst ->age = 88; // 第二种方式
st . age = 10; // 第一种方式
return 0;
}
1.pst ->age 等价于 (*pst). age 等价于st . age
2.我们之所以知道 pst->age等价于st . age , 是因为pst->age是被转化成了(*pst). age 来执行
3.pst->age的含义:pst所指向的那个结构体变量中的age这个成员
结构体变量和结构体变量指针作为函数参数传递的问题
推荐使用结构体指针变量作为函数参数来传递
结构体变量的运算
结构体变量不能相加不能相减,也不能相互乘除,
但结构体变量可以互相赋值
例子:
Struct Student
{
int age;
float score;
char sex;
};
struct Student st1, st2;
st 1 + st 2 ; st 1 - st 2 ; st 1 / st 2 ;// 都是错误的
st 1 = st 2 ; st 2 = st 1 ;// 都是正确的
举例:
动态构造存放学生信息的结构体数组