黑马程序员_C语言_结构体与枚举
来源:互联网 发布:java泛型使用场景 编辑:程序博客网 时间:2024/05/18 01:23
一.1.结构体的基本概念
int char double float 指针 * 数组
数组的特性:1.同一种类型的数据 2.有序的
构造数据类型:结构体,数组
1.结构体:构造类型,可以保存不同类型的数据
2.数组:构造类型,只能保存同一种数据类型
假设定义一个人得数据
int person = 名字(char *)身高(float) 年龄(int)
用普通变量类型推理出结构体
//变量类型变量名字
int a;//c语言已经规定好了int类型具体是什么样的数据
结构体的类型结构体变量名
结构体类型 是私人订制版的数据类型
怎么定义一个结构体类型 struct
struct 结构体类型名称
{
成员类型 成员名称;//后面写个;
};
struct Person
{
char * name;//名字
float height;//身高
int age;//年龄
};//一个崭新的结构体就声明完了
定义一个结构体类型,不会分配存储空间
1.第一种初始化方式
struct Person p;
p.name ="jackson";
p.age =20;
p.height =1.88;
2.第二种初始化方式,定义变量的同时赋值注意点:按照结构体类型顺序赋值
类似 int ages2[3] = {1, 3, 5};
struct Person p1 = {"jordan",1.88, 24};
3.第三种初始化方式 指定赋值的变量 .name
类似 int ages3[5] = {[3] = 2, [4] = 34};
struct Person p2 = {.name ="lty", .age = 20, .height =1.98};
// 注意: 这是不可以的
// struct Person p3;
// p3 = {"lee", 1.98, 28};
// p3也是地址
一.2.结构体内存分析
*结构体变量分配存储空间 按照补齐算法
*分配的存储空间必须是占用字节最大的成员的倍数
1.定义结构体类型,不会分配存储空间
struct Date
{
int age;
int year;
int month;
int day;
};
2.只有通过结构体类型定义变量的时候,才会真正的分配存储空间
struct Date d1 = {12,2014, 5, 1};
// 第一个成员变量的地址,就是结构体的地址
注意:结构体赋值 值传递 不会改变原来结构体的值
struct Date d2;
d2 = d1;//把d1的所有成员一一对应的赋值给d2里的成员(值传递)
一.3.结构体多种定义方式
1.先定义结构体的类型,再定义结构体变量
struct Person
{
int age;
int no;
};
struct Person p;
2.定义结构体类型的同时定义结构体变量
下面这句话作了两件事
1.定义结构体类型
2.通过刚才定义的结构体类型定义结构体变量
struct Person1
{
int age;
int no;
} p1;
3.匿名结构体
定义结构体类型的同时定义结构体变量,且省略了结构体类型名称
缺点就是没有结构体类型的名称,不能复用
struct
{
int age;
int no;
} p3 = {30,20};
参考数组: int ages[] = {1,3, 5};
用结构体定义多个员工数据
struct Kpi
{
int number;//员工号
char *name;//员工名字
char *jineng;//部门
};
元素类型 数组名字[元素个数]
struct Kpi ps[3] =
{
{1001,"师傅","泡妞"},
{1002,"大湿胸","打妖怪"},
{1003,"猪八戒","吃喝玩"}
};
一.5.结构体与指针
struct Person
{
int age;
int no;
};
struct Person xiaoP = {30,1001};
定义指针:
数据类型 *指针变量名称
struct Person *p;
p = &xiaoP;
*p 访问的是整个结构体的那块存储空间
(*p).age //.的优先级最高 (这种方式开发中不常见)
p->age //重点掌握的方式
(*指针名称).成员名称;不常用
指针名称->成员名称;重点
printf("xiaoP的 age = %d, no = %d\n",p->age, p->no);
当利用指针指向结构体变量后几种访问的方式
1.变量名.成员变量 p.age
2.(*指针变量名).成员变量; (*p).age
3.指针变量名->成员变量名; p->age
注意:结构体指针指向的是整个结构体
一.6.结构体作为函数参数
//定义一个结构体
struct Person
{
int age;
char *name;
};
void test(structPerson *temp)
//值传递struct Person temp = struct Person p
{
// (*temp).age = 20;
temp->age =20;
}
int main()
{
struct Person p = {30,"jay"};
test(&p);
printf("p.age = %d, p.name = %s\n",p.age, p.name);
return 0;
}
一.7.结构体嵌套
int main()
{
struct Time
{
int HH;
int mm;
int ss;
};
struct Date
{
int year;
int month;
int day;
struct Time birthTime;
};
struct Person
{
struct Date birthday;
// int year;
// int month;
// int day;
// int HH;
// int mm;
// int ss;
struct Date ruDate;
// int year;
// int month;
// int day;
// int HH;
// int mm;
// int ss;
struct Date liDate;
// int year;
// int month;
// int day;
// int HH;
// int mm;
// int ss;
};
struct Person person =
{
{1980,4, 1,{12,10,55}},
给struct Time birthTime 初始化
{2012,9, 1},
{2013,2, 29},
};
printf("year = %d, month = %d, day = %d, HH = %d\n", person.birthday.year, person.birthday.month, person.birthday.day, person.birthday.birthTime.HH);// ...
这个.可以无限制的.下去
注意:但是结构体嵌套,不能嵌套自己
struct Person
{
int age;
struct Person p;
};
什么是枚举?
1.枚举的本质是基本数据类型 int
2.定义枚举的时候,枚举的取值默认情况下,从0开始,依次递增
使用场景:
当一个变量只有固定的几个取值的时候,可以用枚举变量
注意:想要使用枚举,首先要定义枚举的类型,类似结构体类型的定义
struct 结构体类型名称
{
成员变量;
};
enum 枚举类型名称
{
枚举的取值
};
enum Sex
{
//枚举的取值默认情况下,从0开始,依次递增
man, //0
woman, //1
other, //2
};
- 黑马程序员_C语言_结构体与枚举
- 黑马程序员_C语言基础_构造类型(数组,结构体,枚举)
- 黑马程序员_C语言_循环结构
- 黑马程序员_C语言结构体
- 黑马程序员—C语言_结构体、枚举
- 黑马程序员_C语言学习笔记之结构体和枚举
- 黑马程序员_C#枚举、常量、结构体、数组的学习
- [黑马程序员]_常量、枚举、结构体
- 黑马程序员_C语言_数组
- 黑马程序员_C语言_字符串
- 黑马程序员_C语言_指针
- 黑马程序员_C语言_数据类型总结
- 黑马程序员_C语言_预处理指令
- 黑马程序员_C语言基础_指针
- 黑马程序员_C语言基础_分支结构(if……else,switch)
- 黑马程序员_C语言基础_循环结构使用区别,9*9口诀表
- 黑马程序员_c#基础知识学习笔记:常量,枚举和结构
- 黑马程序员-结构体与枚举
- Linked List Cycle II
- android实现TextView垂直或水平滚动
- 大型网站技术架构(三)--架构核心要素
- 我与代码
- UVA 196 & POJ 1420 Spreadsheet (DFS)
- 黑马程序员_C语言_结构体与枚举
- 【大话设计模式】——策略模式
- Spring @Resource、@Autowired、@Qualifier的注解注入及区别
- [转]如何更改VS2010的[默认开发语言]默认环境设置
- 给定一个整数n,判断这个整数是否是2的N次方
- ucosII初识
- PHP 文档学习 - 1 - 基本语法
- MP3文件格式分析详解(实例分析)
- centos 生成随机密码