结构体是把一些基本数据类型组合在一起形成一个新的复杂的数据类型
结构体的三种定义方式(推荐使用第一种)
·结构体第一种定义方式
#include<stdio.h> //第一种方式 struct?Student?{ int?age; float?score; char?sex; }; int?main() { struct?Student?st = { 80,66.6,'f'?}; printf("%d\n",st.age);//80 return?0; } |
·结构体第二种定义方式
#include<stdio.h> //第一种方式 struct?Student?{ int?age; float?score; char?sex; }st; int?main() { st.age = 80; printf("%d\n",st.age);//80 return?0; } |
·结构体第三种定义方式
#include<stdio.h> //第一种方式 struct?{ int?age; float?score; char?sex; }st; int?main() { st.age = 80; printf("%d\n",st.age);//80 return?0; } |
对于上面的结构体,结构体的类型是struct Student,这个类型的变量是st、st1、st2……
下面是结构体变量初始化的两种方式:
#include<stdio.h> //第一种方式 struct?Student{ int?age; float?score; char?sex; }; int?main() { struct?Student?st = { 80,12.21,'m'?}; //定义的同时进行初始化 struct?Student?st2; st2.age = 12; st2.score = 100; st2.sex = 'f'; //先定义,然后对结构体每个成员变量单独赋值 return?0; } |
#include<stdio.h> struct?Student{ int?age; float?score; char?sex; }; int?main() { struct?Student?st = { 80,12.21,'m'?}; //取出结构体中的age printf("%d\n", st.age); struct?Student* pst = &st; printf("%d\n", pst->age); return?0; } |
pst->age在计算机内部会被转化成(*pst).age
#include<stdio.h> #include<string.h> struct?Student{ int?age; float?score; char?sex; }; void?InputStudent(struct?Student?* pstu) { pstu->age = 10; pstu->score = 12.34; pstu->sex = 'm'; } void?OutputStudent(struct?Student?ss) { printf("%d ?%f ?%c ?\n", ss.age, ss.score, ss.sex); } int?main() { struct?Student?st; InputStudent(&st); OutputStudent(st); return?0; } |
结构体变量之间不能相互加减乘除,但是同类型的结构体变量之间可以相互赋值