第一部分:引用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需要配套使用

【C++基础学习】引用和指针、重载、函数、内存管理的更多相关文章

  1. Java基础学习总结(64)——Java内存管理

    本文介绍的Java虚拟机(JVM)的自动内存管理机制主要是参照<深入理解Java虚拟机>(第2版)一书中的内容,主要分为两个部分:Java内存区域和内存溢出异常.垃圾回收和内存分配策略.因 ...

  2. C++基础 学习笔记五:重载之运算符重载

    C++基础 学习笔记五:重载之运算符重载 什么是运算符重载 用同一个运算符完成不同的功能即同一个运算符可以有不同的功能的方法叫做运算符重载.运算符重载是静态多态性的体现. 运算符重载的规则 重载公式 ...

  3. Java基础学习总结(30)——Java 内存溢出问题总结

    Java中OutOfMemoryError(内存溢出)的三种情况及解决办法 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各 ...

  4. JVM基础学习(一):JVM内存模型

    在Java进阶知识的学习中,JVM都是避不过去的一关,我个人对于JVM的理解其实就是相当于在操作系统的外层再加了一层中间层,从来屏蔽了具体硬件之间的不同实现,使得Java实现了最重要的特性:一次编译, ...

  5. java基础(一):谈谈java内存管理与垃圾回收机制

    看了很多java内存管理的文章或者博客,写的要么笼统,要么划分的不正确,且很多文章都千篇一律.例如部分地方将jvm笼统的分为堆.栈.程序计数器,这么分太过于笼统,无法清晰的阐述java的内存管理模型: ...

  6. iOS阶段学习第21天笔记(ARC内存管理-Copy-代理)

    iOS学习(OC语言)知识点整理 一.OC 中的ARC内存管理 1)ARC中释放对象的内存原则:看这个对象有没有强引用指向它 2)strong:强引用,默认情况下的引用都是强引用 3) weak:弱引 ...

  7. python学习笔记10(Python的内存管理)

      用这张图激励一下自己,身边也就只有一位全栈数据工程师!!! 32. Python的内存管理 1. 对象的内存使用 对于整型和短字符串对象,一般内存中只有一个存储,多次引用.其他的长字符串和其他对象 ...

  8. Object-c学习之路二(oc内存管理黄金法则1)

    今天看了看oc的内存管理,自己管理内存不能随便的release和retain 法则会出现野指针等错误.下面以人和读书的例子做练习. 1.主函数 // // main.m // MemoryManage ...

  9. Objective-C基础笔记(3)OC的内存管理

    Objective-C的内存基本管理 在OC中每一个变量都保存着引用计数器,当这个对象的引用计数器为0的时候该对象会被回收.当使用alloc.new或者copy创建一个对象的时候,对象的引用计数器被置 ...

  10. 引用计数的cocos2dx对象内存管理和直接new/delete box2d对象内存管理冲突的解决方法

    转载请注明: http://blog.csdn.net/herm_lib/article/details/9316601 项目中用到了cocos2dx和box2d,cocos2dx的内存是基于引用计数 ...

随机推荐

  1. AppCode 中开发 Mac OS X 应用程序或共享库的经验小结

    AppCode 是 JetBrains 公司出品的用于开发 Mac OS X 及 iOS 应用程序的集成开发环境,只能运行于 Mac OS X 操作系统环境下,作为 XCode 的高级替代品.由于其基 ...

  2. jQuery时间验证和转换为标准格式的时间

    var TimeObjectUtil; /** * @title 时间工具类 * @note 本类一律违规验证返回false * @author {boonyachengdu@gmail.com} * ...

  3. es6 const let

    一.const 1.const 声明的是常量,一旦声明,值将是不可变的: 2.const也具有块级作用域: 3.不能变量提升(必须先声明后使用): 4.const 不可重复声明 5.const 指令指 ...

  4. 牛客网 牛客练习赛11 D.求距离

    D.求距离 链接:https://www.nowcoder.com/acm/contest/59/D来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言6 ...

  5. Python通用编程

    本文是Python通用编程系列教程,已全部更新完成,实现的目标是从零基础开始到精通Python编程语言.本教程不是对Python的内容进行泛泛而谈,而是精细化,深入化的讲解,共5个阶段,25章内容.所 ...

  6. luogu P3811 【模板】乘法逆元

    题目背景 这是一道模板题 题目描述 给定n,p求1~n中所有整数在模p意义下的乘法逆元. 输入输出格式 输入格式: 一行n,p 输出格式: n行,第i行表示i在模p意义下的逆元. 输入输出样例 输入样 ...

  7. NEERC15

    2015-2016 ACM-ICPC Northeastern European Regional Contest 再开一个新坑吧 目前姿势有限,C.H.I仍然处于弃坑状态 代码戳这里 Problem ...

  8. SWF代码分析与破解之路 (YueTai VIP视频信息获取工具) Socket续篇

    引言 上一篇 <Socket与站点保密应用 (隐藏链接的视频下载)>大大咧咧地从 WEB 讲 Socket.再到 TCP/IP 等协议,又再讲到 Wireshark 怎样抓IP包分析.最还 ...

  9. vue2 + typescript2 项目开发(环境配置)

    Vue 引入 TypeScript vue init airyland/vux2 projectName 增加开发包的依赖 npm install typescript ts-loader --sav ...

  10. 纯JS设置首页,增加收藏,获取URL參数,解决中文乱码

    雪影工作室版权全部,转载请注明[http://blog.csdn.net/lina791211] 1.前言 纯Javascript 设置首页,增加收藏. 2.设置首页 // 设置为主页 functio ...