//引用的作用:代码简洁
//形参和实参同地址,实现的方式和指针的一样
//引用和指针没有本质的区别 //强转引用
float f = 3.14f;
cout<< hex << (int&)f << endl;
cout<< hex << *(int*)&f <<endl;//两式是等价的 cout<< hex << (float&)(int&)f << endl;
cout<< hex << *(float*)&(*(int*)&f) << endl;//两式是等价的 //引用类型和指针类型的区别
char ch = 'a', ch2 = 'b'; //1.引用不能为 NULL ,必须初始化,指针可以为 NULL
// char& Ref = NULL; 错误:引用不能为 NULL
// char& Ref = 123; 错误:引用不能为常量
// char& Ref ; 错误:引用必须初始化
char& Ref = ch; //引用的初始化
Ref = ; //2.引用一旦绑定无法解除, 指针可以
Ref = ch2; //这里 Ref 的地址和 ch 的地址是一样,而不是 ch2 的地址 //3.没有二级引用,有二级指针 //引用当作函数的返回值
//1.当返回值为引用时,不能返回局部变量或形参变量
//使用场合:返回返回值当左值 int& fun()
{
//全局变量
return g_nNum;
} int& fun1(int *pNum)
{
//实际上返回值的是实参
return *pNum;
} int nN = fun1();
int& r = fun1(); //返回值当左值
fun1() = ; //const的用法
//1.不能当左值,通常用来替代无参数宏
不能把 const 转化为 非const
float const PI = 3.14f;
const float PI = 3.14f; //2.const 是编译器做限制
float Area (float R)
{
float* pf = NULL;
const float PI = 3.14f;//此时的 PI 是在栈中不是在堆中
pf = (float*)&PI;
*pf = ; //此时 PI 的值改变为 2
cout<< PI << endl;
} char szBuff[] = "Hello"; //指针的值可以修改,指向的内容不能被修改
const char *psz1 = szBuff;
psz1 = NULL;
//psz1[0] = 'a'; //错误 //指针的值可以修改,指向的内容不能被修改
char const *psz2 = szBuff;
psz2 = NULL;
//psz2[0] = 'b'; //错误 //指针的值不能修改,指向的内容可以修改
char * const psz3 = szBuff;
//psz3 = NULL;
psz3[] = 'c'; //指针的值不能修改,指向的内容不能修改
char const * const psz4 = szBuff;
//psz4 = NULL;
//psz4[0] = 'd'; //指针的值不能修改,指向的内容不能修改
const char * const psz5 = szBuff;
//psz5 = NULL;
//psz5[0] = 'd'; 总结:
.当 const 在 * 的左边时,指针所指向的内容不能修改
.当 const 在 * 的右边时,指针的值不能修改
.当 * 的两边都有 const 时,指针的值和指针所指向的内容都不能修改 void fun( const int& nN1, const int& nN2)
{
//nN1、nN2 的值都不能被改变
cout<<nN1<<' '<<nN2;
} 调用函数--fun(, ); ------->输出:
const引用,首先为 2和4 申请堆空间,然后地址
即 const--引用支持 常量 传给引用 //内联 inline
//注意:加了inline 编译器认为函数简单就内联,否者不内联(没有if for while。。。)
//1.通常用来替代有参宏
//2.比有参宏多了类型检查
//3.debug版不内联
//4.可以在头文件声明定义放一起,多文件包含没问题
//在类机构中,在类体内定义的成员函数都是内联函数 #define ADD(x,y) ((x) + (y)) inline int Add(int nNum1, int nNum2)
{
return nNum1 + nNum2;
} int main(int argc, char* argv[])
{
cout << Add(, ) << endl;
cout << Add(, ) << endl;
cout << Add(, ) << endl; cout << ADD(1.2, ) << endl;
return ;
}

C++第二课(2013.9.27 )的更多相关文章

  1. 【Linux探索之旅】第一部分第二课:下载Linux,免费的噢

    内容简介 1.第一部分第二课:下载Linux,免费的噢 2.第一部分第三课预告:测试并安装Ubuntu 下载Linux,免费的噢 大家好,上一课我们认识了非常“霸气侧漏”的Linux操作系统. 也知道 ...

  2. [译]Quartz 框架 教程(中文版)2.2.x 之第二课 Quartz API,Jobs和Triggers简介

    第二课:QuartzAPI,Jobs和Triggers简介 Quartz API Quartz API 关键的几个接口: Scheduler:跟任务调度相关的最主要的API接口. Job:你期望任务调 ...

  3. CI(CodeIgniter)框架入门教程——第二课 初始MVC

    本文转载自:http://www.softeng.cn/?p=53 今天的主要内容是,使用CodeIgniter框架完整的MVC内容来做一个简单的计算器,通过这个计算器,让大家能够体会到我在第一节课中 ...

  4. OpenCV 第二课 认识图像的存储结构

    OpenCV 第二课 认识图像的存储结构 Mat Mat 类包含两部分,矩阵头和矩阵体.矩阵头包含矩阵的大小,存储方式和矩阵体存储空间的指针.因此,Mat中矩阵头的大小是固定的,矩阵体大小是不定的. ...

  5. Kali Linux Web 渗透测试视频教程— 第二课 google hack 实战

    Kali Linux Web 渗透测试— 第二课 代理简介 文/玄魂 课程地址: http://edu.51cto.com/course/course_id-1887.html 目录 shellKal ...

  6. 【第二课】深入理解Handler

    简要讲解Handler是做什么的 我们知道,在Android中,app启动会启动一个进程一个线程——UI线程,UI线程是主线程,并且不允许这个线程阻塞超过5秒,一旦超过5秒就会ANR. 所以较为耗时的 ...

  7. ruby代码重构第二课

    (文章都是从我的个人主页上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com) 在第一课里提取出了相通的代码,第二课里就把常量提取出来吧 一般把常量的定义写的对应的app/mo ...

  8. NeHe OpenGL教程 第二课:多边形

    前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢 ...

  9. Spark 3000门徒第二课scala面向对象总结

    昨晚听了王家林老师3000门徒spark系列课程的第二课,讲述了scala面向对象知识,并且带着过了一遍Spark核心类:SparkContent,RDD的代码,下面写一下心得: RDD是抽象类,实现 ...

随机推荐

  1. DESTOON系统文章模块默认设置第一张图片为标题图的方法

    连上FTP或者其他方法打开网站目录下的\module\article\admin\template\edit.tpl.php修改设置内容第 <input name="post[thum ...

  2. nsfocus-笔试题

    1.描述sendmail原理及通讯机制 sendmail程序接受到待发邮件后,通过关键字@判断邮件的格式是否符合要求,匹配成功后提取邮件后缀域名信息并查询DNS数据库相关MX(邮件专用)记录,若有匹配 ...

  3. Swift--存储属性-备

    Swift中的属性分为存储属性和计算属性,存储属性就是Objective-C中的数据成员,计算属性不存储数据,但可以通过计算其他属性返回数据. 存储属性可以存储数据,分为常量属性(用关键字let定义) ...

  4. pfsense 2.2RC下的L2TP配置

    还不有测试完成,不过,基本上应该差不多了. 主要参考以下文档: http://blog.sina.com.cn/s/blog_541a3cf10101ard3.html http://thepract ...

  5. Qt浅谈之四十九俄罗斯方块(代码来自网络)

    一.简介 从网上下载了一个Qt实现的俄罗斯方块单机版的源码,觉得非常有意思,故以博客形式记录下来,以便慢慢来研究.在centos6.6下编译运行(注意程序运行需要读取pro目录的配置文件,若把编译目录 ...

  6. Delphi事件列表赏析(38个事件,必须要对这些事件非常熟悉,才能如臂使指,才能正确发布到新控件!)

    我把Delphi常用的几个类的事件都收集齐了,并一一加以注释.原因是在自定义的过程中,看到那堆长长的事件列表感到头晕,但是如果不发布这些事件的话,更是暴殄天物.所以关键还是要对这些事件非常熟悉,才能不 ...

  7. windows上安装winsshd

    winsshd下载地址:http://www.bitvise.com/ssh-server-download 安装后默认配置即可使用:

  8. VMware Workstation 精致汉化系列 使用方法

    http://kuai.xunlei.com/d/QqGABAKChQBwMzxR983   迅雷快传 XP系统之家-温馨提示: VMware Workstation 精致汉化系列 使用方法:1.安装 ...

  9. poj3237--Tree 树链剖分

    题意:三种操作 ①修改第i条边的权值为val,②把u到v路径上的所有边的权值 去相反数③求u 到v路径上最大的边权 线段树的区间更新还是不熟练,,一直搞不对调试了好久还是没对,最后还是看的kuangb ...

  10. URAL 2038 Minimum Vertex Cover

    2038. Minimum Vertex Cover Time limit: 1.0 secondMemory limit: 64 MB A vertex cover of a graph is a ...