结构体:
一般定义形式:
struct 结构体名{
------类型名1成员名1;
------类型名2成员名2;
------。。。
};
可以在main函数内部定义,也可以在外部定义,哪里都可以
//定义一个名为Student的结构体,定义类型时系统并没有为它分配内存
struct Student{
------int age;//4字节
------char *name;
------float height;//4字节
};//存储的地址是连续的,按定义顺序排
//定义一个结构体变量,此时系统为stu分配了内存
struct Student stu={27,”mj“,1.8f};//所有成员占的存储空间==结构体的存储空间
//一定要在定义的时候初始化:
stu={27,”mj“,1.8f};//这是错误的
printf("age=%d\n",stu.age);//打印27. 通过点来调用,类似对象
stu.age=28//更改了age
还有一种定义方式:
struct Student {//Student完全可以省略
。。。
} stu={27,”mj“,1.8f};
结构体内还可以包含别的结构体:
struct Date{
-----int year;
-----int month;
-----int day;
}
struct Strudent{
-----int age;
-----struct Date birthday;
};
struct Student stu={27,{2009,10,10}};
结构体数组:
struct Student stu[2]={{25,”lmj“,1.8f},{27,”mj“,1.8f}};
结构体形参:
struct Person{
-----int age;
}
void change(struct Person p){
-----p.age=9;
}
int main(){
----struct Person person={27};
----change(person);
----printf(”%d”,person.age);//结果还是27.
}
指向结构体的指针:
struct Person person={27};
struct Person *p;
p=&person;
//访问结构体成员:
person.age
(*p).age;
p->age;
枚举:
定义一种枚举类型:
enum Season(spring,summer,autumn,winter);
//定义一个枚举变量
enum Season s=spring;
//定义枚举类型的同时定义一个枚举变量
enum Season{ spring,summer,autumn,winter) s=spring;//也可以省略Season。
注意:c语言编译器会将枚举类型作为整型常量处理,称为枚举常量。
printf(“%d“,s);//打印0
定义的时候更改值,则后面的元素在其基础上加1
enum Season{ spring,summer+3,autumn,winter) s=autumn;
printf(“%d“,s);//打印4
遍历枚举:
for(s=spring;s<=winter;s++)