已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2课 C+中的引用1.引用是C+新增的概念,C没有。2.C没有真正意义上的布尔类型,C+有!3.true和false在C+中是关键字。4. C到C+的升级8C+中的布尔类型C+在C语言的基本类型系统之上增加了bool;C+中的bool可取的值只有true和false;理论上bool只占用一个字节,如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现。有些这么做,有些可能不这么做。Tip:true代表真值,编译器内部用1来表示false代表非真值,编译器内部用0来表示5.下面的代码输出什么?#include int main(int argc, char *argv) int a; bool b = true; printf(b = %d, sizeof(b) = %dn, b, sizeof(b); b = 3; a = b; printf(a = %d, b = %dn, a, b); b = -5; a = b; printf(a = %d, b = %dn, a, b); a = 10; b = a; printf(a = %d, b = %dn, a, b); b = 0; printf(b = %dn, b); printf(Press enter to continue .); getchar(); return 0;6. bool类型只有true(非0)和false(0)两个值C+编译器会在赋值时将非0值转换为true,0值转换为false。7. C到C+的升级9三目运算符的升级下面的代码正确吗?如果正确输出什么?#include int main(int argc, char *argv) int a=1; int b=2; (ab?a:b)=3; printf(a=%d,b=%dn,a,b); printf(Press enter to continue .); getchar(); return 0;8. C语言中的三目运算符返回的是变量值,不能作为左值使用C+中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方;注意: 三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用。9. C+中的引用变量名回顾变量是一段实际连续存储空间的别名;程序中通过变量来申请并命名存储空间;通过变量的名字可以使用存储空间;10. 在C+中新增加了引用的概念引用可以看作一个已定义变量的别名。引用的语法:Type& name = var;#include int main(int argc, char *argv) int a = 4; int& b = a; b = 5; printf(a = %dn, a); printf(b = %dn, b); printf(&a = %08Xn, &a); printf(&b = %08Xn, &b); printf(Press enter to continue .); getchar(); return 0;Tip:普通引用在声明时必须用其它的变量进行初始化11. 引用的意义引用作为其它变量的别名而存在,因此在一些场合可以代替指针;引用相对于指针来说具有更好的可读性和实用性。#include void swap(int& a, int& b) int t = a; a = b; b = t;int main(int argc, char *argv) int a = 4; int b = 5; swap(a, b); printf(a = %dn, a); printf(b = %dn, b); printf(Press enter to continue .); getchar(); return 0;Tip:引用作为函数参数声明时不进行初始化。12. const引用在C+中可以声明const引用;const Type& name = var;const引用让变量拥有只读属性。#include int main(int argc, char *argv) int a = 4; const int& b = a; int* p = (int*)&b; /b = 5; *p = 5; printf(a = %dn, a); printf(b = %dn, b); printf(Press enter to continue .); getchar(); return 0;13. 当使用常量对const引用进行初始化时,C+编译器会为常量值分配空间,并将引用名作为这段空间的别名。#include int main(int argc, char *argv) const int& b = 1; int* p = (int*)&b; /b = 5; *p = 5; printf(b = %dn, b); printf(Press enter to continue .); getchar(); return 0;Tip:使用常量对const引用初始化后将生成一个只读变量。可以用常量对const引用进行初始化,但不能用常量对普通引用进行初始化。14. 引用有自己的存储空间吗?#include struct TRef int& a; int& b;int main(int argc, char *argv) printf(sizeof(TRef) = %dn, sizeof(TRef); printf(Press enter to continue .); getchar(); return 0;15. 引用在C+中的内部实现是一个常指针。Type& nameType* const nameImportance:C+编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同。从使用的角度,引用会让人误会其只是一个别名,没有自己的存储空间。这是C+为了实用性而做出的细节隐藏。void f(int& a) void f(int * const a) a=5; *a = 5; 在本质和原理上是这样的 Type& nameType* const nameint& b=a int* const b=&a16.证据#include struct TRef int& a; int& b; int& c;int main(int argc, char *argv) int a = 1; int b = 2; int c = 3; TRef rA = a, b, c; printf(&a = %08Xn, &a); printf(&b = %08Xn, &b); printf(&c = %08Xn, &c); printf(&rA = %08Xn, &rA); printf(sizeof(TRef) = %dn, sizeof(rA); printf(Press enter to continue .); getchar(); return 0;17. 当函数返回值为引用时若返回栈变量不能成为其它引用的初始值不能作为左值使用若返回静态变量或全局变量可以成为其他引用的初始值即可作为右值使用,也可作为左值使用18. 引用返回值示例#include int& f() static int a = 0; return a;int& g() int a = 0; return a;int main() int a = g(); int& b = g(); f() = 10; printf(a = %dn, a); printf(b = %dn, b); printf(f() = %dn, f(); printf(Press enter to continue .); getchar(); return 0;19. C+对三目运算符做了什么?当三目运算符的可能返回都是变量时,返回的是变量引用;当三目运算符的可能返回中有常量时,返回的是值。int a=1;int b=2;(ab?a:b)=3;/正确,返回a或b的引用,可以作为右值使用;(ab?1:b)=3;/错误,可能返回中有常量,返回的是值,不能作为右值使用。20. 小结bool类型是C+新增加的基础类型,其值只能是true和false;C+中的引用可以看作变量的别名来使用;C+中的常引用可以使得一个变量拥有只读属性;C+中的常引用可以用常量初始化而得到一个只读变量;C+中引用的本质是一个指针常量。21. 课后练习1.在C+中不允许定义引用数组Type& aN,为什么?2.如何定义一个数组的引用?如何定义一个函数引用?#include #include #include using namespace std;int main(int argc, char *argv) char a10=123456789; char (&b)10=a;cout&aendl;cout&bendl;printf(%sn,a);printf(%sn,b); cout Press the enter key to continue .; cin.get(); return EXIT_SUCCESS;#include #include #include using namespace std;int add(int a,int b) return (a+b);int main(int argc, char *argv) int (&p)(int,int)=add; printf(%dn,p(3,4); printf(%dn,add(3,4); cout Press the enter key to continue .; cin.get(); return EXIT_SUCCESS;3.数组引用和数组指针有什么区别?函数引用和函数指针又有什么区别?引用必须初始化,而指针不需要;22. 补充1、对一个引用做取地址操作,只是得出里面存
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纵隔肿物鉴别诊断与护理知识
- 高中数学 加练 专题5 第45练 平面向量基本定理及运算
- 高中物理 加强练习第七章 74.“子弹打木块”模型
- 初一下册数学 讲义 第06讲 三元一次方程组 教案讲义及练习(学生版)
- 新版部编人教版四年级上册道德与法治(课件)3协商决定班级事务
- 维保合同范本
- 配电箱制作及安装合同
- 暖水管开洞施工方案(3篇)
- 水中钢平台施工方案(3篇)
- 沥青油层防水施工方案(3篇)
- 2026年安康紫阳县直及县城周边学校遴选教师(81人)考试模拟试题及答案详解
- 2025年中国真空阀门设备市场调查研究报告
- 2026有色金属期货价格预测机器学习模型构建分析
- (2025年)正阳县纪委遴选笔试试题及答案
- 卫生院应急演练制度
- 2026贵州能源集团有限公司第一批综合管理岗招聘41人考试历年真题汇编附答案解析
- 2025年电动自行车充电桩布局项目可行性研究报告及总结分析
- 2025年福建省法官逐级遴选考试题及答案
- 2024年聊城阳谷县卫生健康系统招聘真题
- 全科医学病案分析报告
- 漆雾凝聚剂技术方案
评论
0/150
提交评论