一、C语言结构体
结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对问题事先自行定义,所以结构体类型变量的定义形式就增加了灵活性,共计有三种形式,分别介绍如下:
1、结构体定义的三种形式:
1> 先定义结构体类型,再定义结构体类型变量:
struct stu / *定义学生结构体类型* /
{
char name[20]; / * 学生姓名* /
char sex; / * 性别* /
long num; / *学号* /
float score[3]; / * 三科考试成绩* /
};
struct stu student1,student2;/ * 定义结构体类型变量* /
struct stu student3,student4;
用此结构体类型,可以定义更多的该结构体类型变量。
2> 定义结构体类型同时定义结构体类型变量:
struct data
{
int day;
int month;
int year;
} time1,time2;
也可以再定义如下变量:
struct data time3,time4;
用此结构体类型,同样可以定义更多的该结构体类型变量。
3> 直接定义结构体类型变量:
struct
{
char name[20]; / *学生姓名* /
char sex; / *性别* /
long num; / *学号* /
float score[3]; / *三科考试成绩* /
} person1,person2; / *定义该结构体类型变量* /
该定义方法由于无法记录该结构体类型,所以除直接定义外,不能再定义该结构体类型变量。
2、结构体用法
1> 基本用法
如:
struct Person // 这一句只是定义结构体类型,并不会分配存储空间。
{
int age;
double height;
char *name;
}
struct Person p1 = {10, 1.55,"jack"}; //这一步才开始定义结构体变量,开始分配存储空间。
printf("age = %d,height = %f,name = %s",p1.age,p1.height,p1.name); //调用打印。
2> 所占内存:结构体所占存储空间一定为最大成员所占空间的倍数。如结构体含有int 和char *,原本应该是4+8,那么最后应该是16。
3> 如果我们再定义一个结构体变量,struct Person P2={.height= 1.34;.age=12;.name="sfd"};
p2 = p1; // 会将p1所有的成员变量对应的值赋给p2的成员。
二、结构体数组
1、结构体数组定义举例:
struct stu s[3]=
{
{1,"jack",300},{2,"rose",400},{3,"kim",200}
}
如果更改某组数值,不可以用 s[0]={4,"tom",600};
只能是s[0].no =4;这样去修改。
三、结构体嵌套
1、结构体嵌套举例:
struct Date
{
int year;
int month;
int day;
};
struct Student
{
int no;
struct Date birthday;//嵌套结构体定义生日
struct Date ruxueriqi //嵌套结构体定义入学日期
}
struct Student stu = {1,{2000,9,10},{2012,8,23}};
printf("year = %d,month = %d,day = %d",stu.birthday.year, stu.birthday.month, stu.birthday.day);
三、枚举类型
1、枚举类型举例:
如果一种变量只有几种可能的值,可以定义为枚举类型。所谓“枚举类型”是将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。
enum Season
{
spring,(默认值为0,后面依次加一)
summer,
autumn,
winter
};//定义枚举类型
enum Season s;//定义枚举类型变量