c++基础补充
- 函数补充
- 函数声明
- 函数的分文件编写
- 指针补充
- 占用大小
- 空指针
- 坏指针
- 野指针
- C++内存分区模型
函数补充
函数声明
#include <iostream>
using namespace std;
int max(int a,int b);
int main() {
int result = max(1,3);
cout << result << endl;
return 0;
}
int max(int a,int b) {
return a > b ? a : b;
}
函数的分文件编写
作用:让代码更加清晰
- 创建后缀名为.h的头文件
- 创建后缀名为.cpp的源文件
- 在头文件写函数声明
- 在源文件写函数定义
指针补充
占用大小
int main() {
int a = 4;
int *ptr = &a;
// 32 为操作系统 指针占用4个字节
// 64 为操作系统 指针占用8个字节
cout << sizeof(ptr) << endl;
return 0;
}
空指针
值为0的指针
int *p = 0;
或者int *p = NULL;
使用
- 避免访问非法数据
- 指针不在使用时,也可以设置为空指针,也是防御性编程,避免成为野指针
int *select &xiao_long_lv
select = NULL;
- 指针在使用前进行合法性判断
int *p = NULL;
if(p){ // p 等同于 p!=NULL
// 指针不为空,对指针进行操作
}
坏指针
坏指针,是指没有初始化的指针,或者非法赋值的指针
- 情形一
int *select;
cout<<*select<<endl;
- 情形二
int *select = 100;
野指针
野指针 指向的位置是不可知的(随机的、不正确的、没有明确限制的)
- 造成野指针的原因
- 指针未初始化
- 指针越界
- 指针指向的空间被释放
- 规避野指针的方法
- 指针初始化
- 小心指针越界
- 指针指向空间释放及时赋值为NULL
- 避免返回局部变量地址
- 指针使用之前检查有效性
C++内存分区模型
- 代码区:存放函数体的二进制代码,有操作系统进行管理
- 全局区:存放全局变量和静态变量以及常量
- 栈区: 由编译器自动分配释放,存放函数的参数值、局部变量等
- 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收
内存四区的意义:不同区域存放的数据,赋予不同的生命周期,给我们带来更大的灵活编程