一.结构体:
首先为什么要用结构体,我们之前从数组可以知道,一个数组可以存放同一种类型的多个元素。而一个结构体可以存放不同类型的多个变量,例如,一个学生类型的结构体,里面有名字(char),年龄(int),身高(float)等等不同的结构体成员。
示例1:结构体的创建
struct student // struct是结构体关键字 student是结构体标签
{
char name[10];
char sex[5];
int age;
float hight;
float score;//大括号内的是不同类型的结构体成员
};//分号不能省略
//以上创建了一个结构体
示例2:结构体初始化
#include<stdio.h>
//方法一:定义时就初始化
struct student
{
char name[10];
char sex[5];
int age;
float hight;
};
int main()
{
struct student s={"zhangsan","男",25,"180.0"};
return 0;
}
//方法二:先定义后初始化
struct student
{
char name[10];
char sex[5];
int age;
float hight;
};
int main()
{
struct student s;
strcpy(s.name, "zhangsan");//这里字符串必须要用strcpy才可以赋值,不能用"="赋值
strcpy(s.sex,"男");
s.age=25;
s.hight=180.0;//用.找到结构体内部的具体每个成员,并初始化
return 0;
}
//方法三:定义时乱序风格
struct student
{
char name[10];
char sex[5];
int age;
float hight;
};
int main()
{
struct student s={
.age=25,
.name="zhangsan",
.sex="男",
.hight="180.0"};
return 0;
}
示例3:结构体的成员访问
方法一:结构体变量名.成员名
struct student
{
char name[10];
char sex[5];
int age;
float hight;
};
int main()
{
struct student s={"zhangsan","男",25,"180.0"};
printf("%s\n",s.name);
printf("%s\n",s.sex);
printf("%d\n",s.age);
printf("%.1f\n",s.hight);
return 0;
}
方法二:结构体指针变量名->成员名
#inlcude<stdio.h>
struct student
{
char name[10];
char sex[5];
int age;
float hight;
};
int main()
{
struct student s={"zhangsan","男",25,"180.0"};
struct stedent* ps=&s;
printf("%s\n",ps->name); //等价:(*ps).name
printf("%s\n",ps->sex); //等价:(*ps).sex
printf("%d\n",ps->age); //等价:(*ps).age
printf("%.1f\n",ps->hight);//等价:(*ps).hight
return 0;
}
示例4:结构体的嵌套
#inlcude<stdio.h>
struct student
{
char name[10];
char sex[5];
int age;
float hight;
};
struct teacher
{
struct student;
char name[10];
int id;
char sex[5];
};
int main()
{
struct teacher t={{"zhangsan","男",25,"180.0"},"wangwu",101,"男"};
//访问嵌套结构体内的成员:
printf("%s\n",t.s.name);
printf("%s\n",t.s.age);
printf("%s\n",t.s.sex);
printf("%s\n",t.s.hight);
return 0;
}