C++学习笔记(一)——内存、引用、const

xiaoxiao2021-02-28  72

内存管理

使用new申请内存,使用delete释放内存。 //C++: int *p = new int; delete p; int *arr = new int[100]; //申请块内存 delete []arr; //如果写成delete arr,则只能删除第一个内存,后面99个内存还在。 //c语言: void *malloc(size_t size); //申请内存 void free(void *memblock); //释放内存

申请和释放内存配套,不可混用。 2. 申请内存需要判断是否成功

int *p = new int; if(NULL == p){ //内存分配失败 //异常处理 }

const常量

使用const比宏定义define好,因为编译时const会检查变量类型,不易出错。 另外:

const int *p; int const *p; //二者等价

下面记录C++Primer中提到的一个问题: 假设给出以下语句:

typedef string *pstring; const pstring cstr;

请问cstr变量是什么类型? 答案是const string类型的指针。 那const pstring指针所表示的真实类型是什么? const修饰的是pstring,而pstring是一个指针,所以等价为:

string *const cstr; //指向string类型对象的const指针 //下面这个等价是错误的 const string *cstr;

引用

int a = 3; int &b = a; b = 10; //b是a的别名,改变b相当于改变a
别名和指针的比较
引用和指针都可以间接访问另一个值,但是它们之间有两个重要区别: 定义引用时必须初始化,而指针初始化不是必要的(但是注意,未初始化的指针不要用于解引用*,即不要对该指针进行存、取值等操作)给引用赋值修改的是与该引用关联的对象的值,而不是该引用与另一个对象的关联,引用一旦初始化就始终指向特定的对象。 //指针赋值 int ival = 1024,ival2 = 2048; int *pi = &ival, *pi2 = &ival2; pi = pi2; //指针pi指向了ival2 //引用赋值 int &r1 = ival, &r2 = ival2; r1 = r2; //引用关联的对象没变,ival的值变成了ival2的值
转载请注明原文地址: https://www.6miu.com/read-41442.html

最新回复(0)