第一部分:引用VS指针
引用的含义:变量的别名
注意:变量不能只有别名,必须有一个真实的变量与之相对应
基本数据类型的引用
对别名本身的操作和它的实体的操作是一样的
1.基本数据类型的引用
类型 &变量引用名=变量名
上述程序输出结果为:10
2.结构体数据类型的引用
类型 &结构体引用名=结构体名
上述程序输出结果为:10 20
3.指针类型的引用
类型 *&指针引用名=指针
上述程序输出结果为:20
4.引用作为函数参数
上述程序输出结果为:x=20,y=10
注意:推荐使用右边的程序模板
常考问题:引用于指针的区别和联系是什么?
答:
★ 联系:1. 都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。 ★ 区别:1. 指针是一个实体,而引用仅是个别名;2. 引用使用时无需解引用(*),指针需要解引用;3. 引用只能在定义时被初始化一次,之后不可变;指针可变;4. 引用没有 const,指针有 const;5. 引用不能为空,指针可以为空;6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;7. 指针和引用的自增(++)运算意义不一样;8. 从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。
详细内容:http://blog.csdn.net/lyd_253261362/article/details/4323691
———————————————————————————————————————————————————————————————————————————————————————————————————————————————
第二部分:让人既爱又恨的const
const的基本作用是定义一个常量,常量的含义是一经定义就不能再修改了。
1、普遍变量与const常量的对比:
2、几种常见const的写法及对比
一个比较好记的方法来区分 int const *p与 int* const p,把*读作a pointer to然后从后往前读:
第一个int const *p就可以读作 p is a pointer to const int,p是指向常量的指针
第二个int* const p就可以读作 p is a const pointer to int,p是指向int型的常指针
辨析:
【说明】
第一条语句中指针y所指位置的值可能发生变化将会影响到x,因而此操作被编译器禁止
第二条语句将变量x所在地址的值作为变量y的初值,此操作合理,因而是允许的
练习题:
正确选项:A
解释:指针p所指位置的值可能发生变化将会影响到a,因而此操作被编译器禁止
define 与const定义常量的区别
define不检查语法错误,而const在编译时检查语法错误。因而更加推荐使用const的方式来定义一个常量。
—————————————————————————————————————————————————————————————————————————————————————————————————
第三部分 函数新特性
1、函数参数可以设置默认值,默认值参数列表在申明时给出,定义的时候无需给出
注意:有默认参数值的参数必须在参数列表的最右边
程序执行说明:无实参则采用默认值,否则覆盖默认值
2、函数重载
1)含义
在相同作用域内,
用同一个函数名定义多个函数,
参数个数和参数类型不同
2)使用示例
3、内联函数inline
1)内联函数与普通函数的对比
2)使用示例
3)使用说明
- 内联编译对于编译器来说是建议性的,实现与否由具体编译器决定
- 逻辑简单(没有循环分支结构),调用频繁的函数建议使用内联
- 递归函数无法使用内联函数
【小结】
1、函数参数默认值 实参覆盖默认值
2、函数重载 名称相同参数可辨
3、内联函数 inline 效率高 有条件
———————————————————————————————————————————————————————————————————————————————————————————————————————————————
第四部分 内存管理
1.开题:什么是内存管理?
思考:内存的本质是什么? 一种资源
思考:谁掌管内存资源? 操作系统
思考:我们能做什么? 申请/归还内存资源
2.内存的申请和释放
申请内存: new
释放内存: delete
3、申请和释放内存的方法
申请内存:int *p=new int; int a =new int(5);
释放内存:delete p;
4、申请和释放块内存
申请内存:int *arr=new int[1000];//申请块内存
释放内存:delete []arr;//释放块内存
5、内存的其他管理方式
C语言
void *malloc(size_t size);
void *free(void *memblock)
C++
new
delete
使用建议:配套使用,不要混搭
6、申请内存的注意事项
1)内存申请需要判断是否成功
int *p=new int[1000];
if(NULL==p)
{
//内存分配失败
}
2)释放内存需要设空指针
【小结】
1、使用new申请内存,使用delete释放内存
2、内存申请需要判断是否成功,释放内存需要设空指针
3、new与delete需要配套使用