您的位置:首页 > 职场人生

黑马程序员--枚举类型和结构体

2015-06-26 21:15 393 查看
枚举类型:

场合:固定取值,方便交流,比如性别设置1为男性,不好识别

1.定义枚举类型:

enum Season

{

spring, // 0 整形可以改值 spring = 1,其他依次递增

summer,//1

autumn,//2

winter//3

};

2.定义枚举变量

enum Season s = summer;

enum Sex {Man, Woman, Unknow};

enum Sex s = Unknow; // 方便交流,固定取值

结构体(构造类型:数组):

数组:只能由多个相同类型的数据构成

结构体:可以由多个不同的类型的数据

结构体类型 结构体变量名

1.定义结构体类型

struct Person

{//里面的3个变量可以称为结构体的成员或者属性

int age;

double height;

char *name;

};

2.根据结构体类型,定义结构体变量

struct Person p = {20,1.55, "jack"}; //p为结构体变量

p.age = 30;

p.name = "rose";

只能在定义结构体/数组的同时赋值

错误写法:

struct Person p2;

p2 = {30, 1.67, "jack"}

正确写法:

struct Person p2 = {20, 1.67, "jim"};

struct Person p2 = {.age = 20, .height = 1.67, .name = "jim"};

内存分析:

1.定义结构体类型;

struct Date

{

int year;

int month;

int day;

};// 仅仅定义类型,并不会分配存储空间

2.定义结构体变量:// 真正分配存储空间

struct Date d1 = {2011, 4, 10};

int s = sizeof(d1);//此结构体类型占用12字节

printf("%p %p %p", &d1.year, &d1.month, &d1.day);

//相差4个字节

d2 = d1; //会将d1所有成员值赋给d2对应值

struct Student stu

{

int age;// 4个字节

char *name;// 8个字节

};//占16个字节 ,必须是最大字节的倍数

//补齐算法(对其算法)

定义结构体变量(3种方式):

1.先定义类型,在定义变量

struct Student

{

int age;// 4个字节

char *name;// 8个字节

};

struct Student stu = {20, 1.78, "jack"}

2.定义类型的同时定义变量

struct Person

{//里面的3个变量可以称为结构体的成员或者属性

int age;

double height;

char *name;

} stu; // 定义类型的同时,定义变量

结构体类型不能重复定义

3.定义类型的同时定义变量(省略了类型名称)

struct{

int age;

char *name;

}stu; // 这样定义也是正确的

每次定义都要重新写东西,如下

struct{

int age;

char *name;

}stu1; // 这样定义也是正确的

struct{

int age;

char *name;

}stu2; // 这样定义也是正确的

结构体类型也是有作用域的,从定义类型的哪一行开始,一直到代码块结束

结构体类型的作用域:

定义在函数外面,全局有效(从定义类型的那行开始,一直到文件结尾)

定义在函数(代码块)内部,局部有效(从定义类型的那行开始,一直到代码块结束)

结构体数组:

struct RankRecord

{

int no;

char *name;

int score;

};

//int ages[3] = {1, 2, 3};

struct RankRecord records[3] =

{

{1, "jack", 5000},

{2, "jim", 500},

{3, "jake", 300}

};

records[0] = {3, "rose", 50};//这样错误

record[0].no = 4;

for (int i=1; i<3; i++)

{

printf("%d\t%s\t%d\n", recorf[i].no, record[i].name,record[i].score);

}

指向结构体的指针:

struct Student

{

int no;

int age;

};

struct Student stu = {1, 20};

struct Student *p;

p = &stu;

//第一种方式

printf("age = %d, no = %d\n", stu.age, stu.no);

//第二种方式

printf("age = %d, no = %d\n", (*p).age, (*p).no);

//第三种方式

printf("age = %d, no = %d\n", p->age, p->no);

p->age = 30;

指向结构体的指针的定义:

struct Student *p;

利用指针访问结构体的成员:

(*p).成员变量

p->成员变量

结构体的嵌套:

int main()

{

struct Date

{

int year;

int month;

int day;

};

struct Student

{

int no;// 学号

struct Date birthday; // 生日

struct Date ruxueDate; //入学日期

//这种写法是错误的,自己不能包含自己

struct Student stu

};

struct Studend stu = {1, {2000, 9, 10}, {1992, 5, 18}};

printf("year = %d, month = %d, day = %d\n", stu.birthday.year, stu.birthday.month, stu.birthday.day);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: