- ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
构造类型定义: 由一个或者多个已定义类型的元素用构造的方法,构造新的类型
构造类型分类: 数组 结构体
结构体: 由相同类型或者不同类型的数据用构造方法,构造的类型
一、结构体的定义: struct 结构体名{
成员列表;
}; //注意此处的分号不能省
例:定义一个老师的结构体
struct teacher{
char *name;
char sex;
int age;
int height;
int weight;
int seniority;
};
1、结构体变量定义的三种方法
1)先定义结构体,然后在定义结构体变量
例:
struct teacher{ //定义一个老师的结构体
char *name; //定义名字
char sex; //定义性别
int age; //定义年龄
int height; //定义身高
int weight; //定义体重
int seniority; //定义教龄
};
struct teacher tea; //定义结构体后,再定义结构体变量
注意: (1)结构体定义完成以后,计算机并不会给结构体分配内存空间
(2)会在定义结构体变量后,分配存储空间
结构体变量定义格式:struct 结构体名 结构体变量名;
struct Student stu1,stu2,stu3; //定义多个结构体变量
2)定义结构体的同时,定义结构体变量
格式:struct 结构体名{
}结构体变量1,结构体变量2....;
例:
struct teacher{
char *name;
char *sex;
int age;
int height;
int weight;
int seniority;
}tea1,tea2,tea3; //同时定义了三个结构体变量,分别为tea1,tea2,tea3
3)使用匿名结构体定义结构体变量
struct {
}结构体变量1,结构体变量2....;
例:
struct{ //匿名结构体
char *name;
char *sex;
int age;
int height;
int weight;
int seniority;
}tea1,tea2,tea3;
4)用结构体类型,定义结构体变量
struct Car car1;
2、获取结构体变量中的成员
tea.name //获取老师的名字
3、结构体变量的初始化
1)先定义结构体变量,然后再初始化
struct teacher{ //定义一个老师的结构体
char *name; //定义名字
char sex; //定义性别
int age; //定义年龄
int height; //定义身高
int weight; //定义体重
int seniority; //定义教龄
};
struct teacher tea; //定义结构体变量
//结构体变量初始化
tea.name="王兰";
tea.sex='F';
tea.age=26;
tea.height=160;
tea.weight=90;
tea.seniority=3;
2)定义结构体变量的同时,进行初始化
struct teacher tea={"丽丽",'F',28,158,95,3}; //定义结构体变量同时进行初始化
3)定义结构体的同时,还可以指定元素的初始化
struct teacher={.name = "磊磊"};
4、结构体变量占用存储空间大小
计算结构体变量在内存中占用的字节数的方法
1)先找对齐模数
对齐模数 :是结构体中的基本数据类型中占用字节数最大的那个
2)在计算结构体变量的中各个成员占用的字节和
printf("结构体变量tea在内存中占用的字节数:%ld",sizeof(tea));
5、结构体作用域:全局、局部
#include <stdio.h>
struct tree{ //全局结构体
char *name;
int age;
}tr;
int main(int argc,const char *argv[]){
struct tree tr={"杨树",8};
printf("%s\t%d\n",tr.name,tr.age);
printf("%s\t%d\n",tre.name,tre.age); //错误的
struct tree{ //局部结构体
char *name;
int age;
};
struct tree tre={"白果树",10};
printf("%s\t%d\n",tre.name,tre.age);
二、结构体数组: 用来存放大量的结构体相同的结构体变量
1、 结构体数组定义:
1)定义结构体的同时,定义数组
struct teacher{ //定义一个老师的结构体
char *name; //定义名字
char sex; //定义性别
int age; //定义年龄
int height; //定义身高
int weight; //定义体重
int seniority; //定义教龄
}tea[3];//定义结构体同时定义数组
2)先定义结构体,后定义数组
struct teacher tea[3];
2、结构数组的初始化和遍历
1)结构体数组的初始化方法
1、定义结构体数组的时候,进行初始化
struct person{
char name[5];
int age;
}per[2]={{"媚媚",18},{"小明",8},{"沙沙",20}};
2、定义的同时进行初始化
struct teacher tea[3]={ {"丽丽",'F',28,158,95,3},{"李云飞",'M',30,175,180,5},{"郑秀",'F',23,162,100,1}};
3、先定义后初始化,整体赋值
struct teacher a[2];
a[0]=(struct teacher){"小强",'M',23,177,160};
a[1]=(struct teacher){"小刚",'M',25,173,170};
4、先定义结构体数组,后初始化
struct teacher tea[2];
tea[0].name = "明明";
tea[0].age = 30;
2)结构数组的遍历
struct teacher tea[3]={
{"丽丽",'F',28,158,95,3},
{"李云飞",'M',30,175,180,5},
{"郑秀",'F',23,162,100,1}
};
for (int i=0; i<3; i++) {
printf("老师的姓名:%s\n性别:%c\n年龄:%d\n身高:%d\n体重:%d\n教龄:%d\n",tea[i].name,tea[i].sex,tea[i].age,tea[i].height,tea[i].weight,tea[i].seniority); //获取结构体数组变量值并输出
- ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------