您的位置:首页 > 编程语言 > C语言/C++

c语言学习笔记之结构体和枚举

2015-12-12 21:46 381 查看

结构体

1、基本概念

构造类型:由已有的数据类型构成类型

数组:多个同种类型的数据构成的那么一种类型

特点:只能存放一种数类型

结构体:从来存放表示某种特定含义的一组数据,是对数据的封装而函数是对功能封装。

好处:提高代码的可读性 提高数据易用性

提高代码可维护性

2、结构体的定义

// 定义结构类型
struct 结构类型名称{
成员类型 成员名称;
...
};//必须加分号

// 通过结构体类型定义结构变量
struct 结构类型名称 结构体变量名称;


注意:结构体名称大写(命名规范)

3、定义结构体变量的多种方式(掌握)

第一种方式

struct Person{
int age;
double height;
};
struct Person p1;


即:

先定义结构体类型

定义结构变量

第二种方式:

struct Person{
int age;
double height;
} p1,p2;


即:

定义结构体类型的同时定义结构变量

注意:

结构体类型定义是不可以重名的

数组名称是不可以改变的

int nums[5];

nums =(int[5]){1,2,3,4,5};// 错误

4、 结构体初始化

方式一:一一赋值

p1.age = 10;
p1.name = "xx";
p1.height = 1.3;


方式二:整体赋值

赋值的时候,{}中元素的顺序与定义结构体时成员顺序相同

p1 = (struct Person){20,"小明",2.0};


方式三:在定义结构体的时候赋值

struct Person{
int age;
double height;
} p1{20,1.75}};


5、结构体与普通变量的区别

除了结构体没有声明外,其他的都一样

用法区别:struct Person 和 int使用是一样的

6、结构体的存储细节(理解)

结构体本身不占用存储空间,如同int一样

为了快速访问变量,结构体内部有一个补齐算法,默认情况下它一定是占用存储空间最大成员的倍数(一定是偶数)

我们自己指定结构体占用的空间:

例:

//指定一组占用多少字节
#pragma pack(8)


7、结构体类型的作用域(掌握)

和变量一样,即

在函数内部,结构类型作用域就如同局部变量一样

在外边定义的结构体类型像全局变量的作用域

作用域:从定义的那一行开始直到文件的结束

二、结构体数组

数组元素为结构体数组

1、定义结构体数组

结构类型 数组名称[元素个数];


2、结构体数组初始化

先定义结构体数组然后初始化

定义结构体数组的同时进行初始化

3、使用

如同int数组一样使用

注意:

一般情况下结构体类型都是定义在函数的外部

如果没有显式初始化的结构体,那么这个结构体中所有成员都会被初始化为0

四、结构体指针

指向结构体的指针

1、定义结构体指针

格式:

结构类型 * 指针变量名称;


如:

struct Student stu = {"大木",60,59};
//  定义结构体指针
struct Student *sp1;
sp1 = &stu;

//  定义的同时进行初始化
struct Student *sp = &stu;


2、通过指针访问结构体成员

// 第一种方式:通过指针访问结构体的成员的
(*sp).score = 60;

// 第二种方式(重点)
sp->name = "小木";
sp->no = 59;


五、结构体嵌套

1、 结构体不可以嵌套自己,不能有字节这种类型的成员

2、结构体可以嵌套自己类型的指针

六、结构体与函数

1、结构体变量作为函数参数是值传递

2、结构体指针作为函数参数是地址传递

3、结构体数组作为函数参数是地址传递

七、枚举

一个个列出来,穷举

1、枚举作用:消除魔法数字

2、使用场景:当某个东西只有那么几个取值时候就是用枚举

3、定义枚举格式

enum 枚举类型的名称{
元素,//逗号
...
};


如:

//定义性别枚举类型
enum Sex{
Man,
Woman,
Other
};


注意:

枚举定义之后,后面不可定义与成员相同名称的

这里不能把要给数字赋值给一个枚举类型的变量,这样枚举存在的意义就没了

可以指定枚举中每一个元素值,如果前面的元素指定了值后面元素没有指定值则是前面元素的值加1,

如:

enum Season{
Spring = 2,
Summer,
Autumn,
Winter,
SOther = 9
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 结构体