黑马程序员--枚举类型和结构体
来源:互联网 发布:解压时数据错误 编辑:程序博客网 时间:2024/05/18 02:50
枚举类型:
场合:固定取值,方便交流,比如性别设置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;
}
场合:固定取值,方便交流,比如性别设置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;
}
0 0
- 黑马程序员--枚举类型和结构体
- 黑马程序员--typedef关键字和结构体 枚举类型
- 黑马程序员:枚举和结构
- 黑马程序员_总结跳转语句、枚举类型、结构体类型、类以及值类型和引用类型的区别
- 黑马程序员--C语言——结构体和枚举类型
- 黑马程序员——C#枚举 结构体 this关键字 base关键字 值类型 引用类型 装箱和拆箱
- 黑马程序员-学习枚举、结构体和数组的笔记
- 黑马程序员------C语言-----结构体和枚举
- 黑马程序员--03C结构体和枚举
- 黑马程序员训练营--结构和枚举
- 黑马程序员-方法、结构和枚举
- 黑马程序员——C语言热身——预处理指令、变量类型、static和extern、结构体、枚举
- 结构体和枚举类型
- [黑马程序员]_常量、枚举、结构体
- 黑马程序员-结构体与枚举
- 黑马程序员--结构体以及枚举
- 黑马程序员--IOS学习笔记(变量类型、结构体、枚举)
- 黑马程序员_C语言基础_构造类型(数组,结构体,枚举)
- Sql入门---------操作符
- 九度 1201 -二叉排序数遍历- 二叉排序树
- iOS代码规范
- 安装rrdtool
- 2>&1
- 黑马程序员--枚举类型和结构体
- pomelo添加定时任务
- Windows程序设计学习笔记(四)自绘控件与贴图的实现
- IOS--C 语言 Lesson Four if 语句
- 提高C++程序运行效率的10个简单方法
- 关于/dev/null及用途
- 架构师速成5.1-小学gtd进阶
- 物联网系统的搭建(七)
- 优化算法-BFGS