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

内存管理

  1. 使用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
别名和指针的比较
引用和指针都可以间接访问另一个值,但是它们之间有两个重要区别:
  1. 定义引用时必须初始化,而指针初始化不是必要的(但是注意,未初始化的指针不要用于解引用*,即不要对该指针进行存、取值等操作)
  2. 给引用赋值修改的是与该引用关联的对象的值,而不是该引用与另一个对象的关联,引用一旦初始化就始终指向特定的对象。
//指针赋值
int ival = 1024,ival2 = 2048;
int *pi = &ival, *pi2 = &ival2;
pi = pi2; //指针pi指向了ival2

//引用赋值
int &r1 = ival, &r2 = ival2;
r1 = r2; //引用关联的对象没变,ival的值变成了ival2的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值