一、结构体
结构体:很像面向对象中的对象,但是结构体没有方法只有属性,一个结构体由不同类型的元素组成,而相较于数组来说,数组只能存储相同类型的元素。结构体占用的空间等于内部各元素占用空间的和,并且元素在内存中的地址(按照元素定义的顺序)是连续的。
注意:结构体不能像面向对象中那样递归调用,自己包含自己,但是可以包含其他类型的结构体。
//定义一个班级的结构体 struct Class{ char *className; }; //定义一个结构体,只是一个类型,但不是一个变量,系统并没有为Student这个结构体分配内存 struct Student{ int age; //占用4个字节 char *name;//占用8个字节 struct Class class; };
//第二种定义方式定义时赋值 struct Student1{ int age; char *name; } stu1={24,"cooljune"}; //第三种方式匿名 struct { int age; char *name; } stu2={24,"cooljune"}; int main(int argc, const char * argv[]) { //定义一个结构体变量,系统分配内存 struct Student stu={24,"cooljune",{"三年级一班"}};//赋值 //访问变量 printf("age=%i,name=%s,班级=%s\n",stu.age,stu.name,stu.class.className); return 0; } |
结构体数组
struct Student stus[5]={{24,"cooljune","三年级一班"}}; stus[0].age=28; printf("age=%i,name=%s,班级=%s\n",stus[0].age,stus[0].name,stus[0].class.className); |
结构体与指针
//指向结构体的指针 void point(){ struct Student stu={24,"cooljune",{"yiban"}}; struct Student *s;//定义一个指向结构体的指针 s=&stu;//让指针s指向结构体stu //通过指针访问结构体的值
printf("name=%s",(*s).name); printf("name=%s",s->name);//c++中的方式 } |
二、枚举
枚举:和面向对象中一样,枚举都是用来定义一些固定取值的常量,但是C中的枚举中的值是整数,默认按照0递增,也可以在定义枚举的时候赋值,那么后面的元素的值就会以这个元素为第一个元素递增
//定义枚举类型 enum Week{ sun,mon,tues,wed,thur,fri,sat };
//定义时赋值当然枚举名称可以省略 void createEnum(){ enum Week{ sun,mon=2,tues,wed,thur,fri,sat } w=sun; //定义一个枚举变量 enum Week w=fri; printf("%i",w); } |
遍历枚举元素
//遍历枚举元素 enum Week ws; for (ws=sun; ws<=sat; ws++) {
} |