C++八股文
C++基础
指针和引用的区别
指针存放某个对象的地址,其本身就是变量,本身就有地址,所以可以有指向指针的指针;
可变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。
引用就是变量的别名,从一而终,不可变,必须初始化
不存在指向空值的引用,但是存在指向空值的指针
- 定义和声明
指针是一个变量,其值是另一个变量的地址。声明指针时,使用*
符号
int a = 10;
int *ptr = &a;
引用是一个别名,它是在已存在的变量上创建的。在声明引用时,使用&
符号
int b = 10;
int &ref = b;
- 使用和操作
指针: 可以通过解引用操作符*
来访问指针指向的变量的值,还可以通过地址运算符&
获取变量的地址。
引用: 引用在声明时被初始化,并在整个生命周期中一直引用同一个变量。不需要使用解引用操作符,因为引用本身就是变量的别名
int val = *ptr; //获取指针指向的值
int address = &a; //获取变量a的地址
int newValue = ref; //获取引用的值
- 空值和空引用
指针可以为空(nullptr)表示不指向任何有效的地址。
引用必须在声明时初始化,并且不能再后续改变已用的绑定对象。因此,没有空引用的概念 - 可变性
指针: 可以改变指针的指向,使其指向不同的内存地址。
引用: 一旦引用被初始化,它将一直引用同一个对象,不能改变绑定。 - 用途
指针: 通常用于动态内存分配、数组操作以及函数参数传递。
引用: 通常用于函数参数传递、操作符重载以及创建别名。
数据类型
整型 short int long 和 long long
C++整型数据长度标准
short至少 16位
int 至少与short一样长
long 至少32位,且至少与int一样长
long long 至少64位,且至少与long一样长
在使用8位字节的系统中,1 byte = 8 bit
很多系统都使用最小长度,short为16位即2个字节,long为32位即4个字节,long long 为64位即8个字节,int的长度较为灵活,一般认为int的长度为4个字节,与long等长。
可以通过运算符sizeof判断数据类型的长度。
头文件climits定义了符号常量。例如:INT_MAX表示int的最大值,INT_MIN表示int的最小值。
无符号类型
无符号类型即为不存储负数值的整型,可以增大变量能够存储的最大值,数据长度不变。
int被设置为自然长度,即为计算机处理起来效率最高的长度,所以选择类型时一般选用int类型。
关键字
const关键字
const的作用:被它修饰的值不能改变,是只读变量。必须在定义的时候就给它赋初始值。
- 常量指针(底层const)
常量指针是指定义了一个指针,这个指针指向一个只读的对象,不能通过常量指针来改变这个对象的值。常量指针强调的是指针对其所指对象的不可改变性。
特点:靠近变量名。
形式:- const 数据类型* 指针变量 = 变量名
- 数据类型 const *指针变量 = 变量名
示例:
int temp = 10;
const int* a = &temp;
int const *a = &temp;
//更改
*a = 9; //错误,只读对象
temp = 9; //正确
- 指针常量(顶层const)
指针常量是指定义了一个指针,这个指针的值只能在定义时初始化,其他地方不能改变。指针常量强调的是指针的不可改变性。
特点:靠近变量类型
形式:数据类型* const 指针变量 = 变量名
示例:
int temp = 10;
int temp1 = 12;
int* const p = &temp;
//更改
p = &temp2; //错误
*p = 9; //正确
static关键字的作用
static
关键字主要用于控制变量和函数的生命周期、作用域以及访问权限。
3. 静态变量
- 在函数内部使用static
关键字修饰的变量称为静态变量。
- 静态变量在程序的整个生命周期内存在,不会因为离开作用域而被销毁。
- 静态变量默认初始化为零(对于基本数据类型)。
void exampleFunction(){
static int count = 0; //静态变量
count++;
cout <<"Count:"<< count << endl;
}
- 静态函数
- 在类内部使用
static
关键字修饰的函数是静态函数。 - 静态函数属于类而不是类的实例,可以通过类名直接调用,而无需创建对象。
- 静态函数不能直接访问非静态成员变量或非静态成员函数。
- 在类内部使用
class ExampleClass{
public:
static void staticFunction(){
cout << "Static function" << endl;
}
};
- 静态成员变量
- 在类中使用
static
关键字修饰的成员变量是静态成员变量。 - 所有 类的对象 共享同一个静态成员变量的副本。
- 静态成员变量 必须在类外部单独定义,以便为其分配存储空间。
- 在类中使用
class ExampleClass{
public</