内存泄漏
- 只申请,不释放,导致程序使用的内存空间一直增长
- 再程序退出时,所有的内存都会释放
- 内存污染:向没有申请的内存空间写入数据
返回变量的地址
- 只有局部变量的地址不可以返回,应为局部变量所在的函数结束之后就被释放
- 静态局部,全局,静态全局,这些变量,只要程序不退出,就不会释放,所以这些变量的地址是可以返回操作的
1 | int a = 10; |
通过函数的值传递,不能改变实参的值
1 | void mem_p(char *q) |
- 如果进行测试,以上代码并不能运行
- 最终修改的代码如下所示
传实参的地址,可以在调用函数改变实参的值
1 |
|
结构体
- 将多个相同或者不同的类型的数据存在一块连续的空间中
结构体的定义和初始化
- 定义一个结构体数据类型
- 关键字struct 代表这是一个结构体类型
- stu是这个结构的名字
- 整个结构体的类型是struct stu
- 结构体类型struct stu {} 中是结构体的成员,一共有3个成员,每个成员的类型可以是任意类型
- 定义结构体时{}后面记得加分号
- 定义结构体struct stu,他只是一个类型,一个模板,没有空间,不可以给结构体成员赋值
1 |
|
结构体数组
- 是一个数组,数组的每一个元素都是结构体
1 | struct stu |
结构体套结构体
1 |
|
结构体赋值
相同类型的变量是可以相互赋值
1 |
|
结构体指针
1 |
|
结构体套指针
示例代码一
1 |
|
代码一新思路
1 |
|
示例代码二
1 |
|
示例代码三
1 |
|
结构体数组作为函数的形参
1 |
|
const修饰的结构体指针变量
1 |
|
共用体
- 多个变量公用一块内存空间,在同一时刻,只能有一个变量起作用
大小端问题
- 在内存中左面是低地址,右面是高地址
- 示例:int a = 0x01020304;
- 小端:低位存低地址,高位存高地址 04 03 02 01
- 大段:低位存高地址高位存低地址: 01 02 03 04
- 大段:大型服务器,网络上的数据
- 小端:小型的计算机
1 |
|
- 可以使用上述代码实现验证
枚举
- 将枚举类型的变量的值一一列举出来,枚举变量的值只可以赋值为{}里面的值是常量
- 枚举{}里面列举的常量的默认值是从0开始
1 |
|
typedef
- 用来给类型取别名
- typedef 原类型 新类型