结构体
为什么需要结构体
为了表示一些复杂的事物,而普通的基本类型无 法满足实际需求。
什么叫结构体
把一些基本类型数据组合在一起形成的一个新的复合数据类型,这个叫结构体
如何定义结构体
3种方式: 推荐使用第一种方式
//第一种方式:这只是定义了一个新的数据类型,并没有定义变量
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.先定义,定义完之后只能单个赋值
int main(){
struct Student st={80,66.6F,'F'} //初始化,定义的同时赋初值。
struct Student st2;//定义完之后只能单个赋值
struct Student *pst=&st;//表示pst可存放这种类型的地址
st.age=10;
pst->age=88;
//在计算机内部会被转化成(*pst).age,这就是->的含义,也是一种硬性规定,所以pst->age等价于(*pst).age等价于st.age
st2.score=88.8f;//88.8在c语言中默认是double类型,如果希望一个实数是floatl类型,则必须在末尾加f或F
st2.sex='F';
printf("%d %f %c\n",st2.age,st2.score,st2.sex);
}
如何取出结构体变量中的每一个成员
1.结构体变量名.成员名
2.指针变量名->成员名(常用)
结构体变量的运算
结构体变量不能相加,不能相减,也不能相乘
但结构体变量可以相互赋值
结构体变量和结构体变量指针作为函数参数传递的问题
// 结构体变量和结构体变量指针作为函数参数传递的问题
void InputStudent(struct Student *);//函数声明
void OutputStudent(struct Student ss);
int main(){
struct Student st;
InputStudent(&st);
OutputStdent(st);
return 0;
}
/*//对stu赋值不能对st赋值,函数加载完就没有了。本函数错误
void InputStudent(struct Student stu)
{
stu.age=10;
strcpy(stu.name,"张三");//不能写成stu.name="张三";
stu.sex='F';
}*/
void InputStudent(struct Student * pstu)//pstu只占四个字节
{
(*pstu).age=10;
strcpy(pstu->name,"张三");
pstu->sex='F';
}
//不修改内容时可不传指针但是指针速度快,所以推荐用指针传参
void OutputStudent(struct Student ss){
printf("%d %c %s\n",ss.age,ss.sex,ss.name);
}