暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
超级棒的C++面试题集锦
303
145页
8次
2021-04-12
免费下载
更多 IT 认证课程请访 美河学习在线 www.eimhe.com
C++
1. 引用和指针的区别?
1) 指针是一个实体需要分配内存空间。引用只是变量的别名不需要分配内存空间。
2) 引用在定义的时必须进行初始并且不能够改变。指针在定义的时候不一定要
初始化,并且指向的空间可变。(注:不能有引用的值不能为 NULL
3) 多级指针,但是没有多级引用,只能有一级引用。
4) 指针和引用的自增运算结果不一样。(指针是指向下一个空间,引用时引用的变量
值加 1
5) sizeof 引用得到的是所指向的变量(对象)的大小, sizeof 指针得到的是指针
本身的大小。
6) 引用访问一个变量是直接访问,而指针访问一个变量是间接访问。
7) 使用指针前最好做类型检查,防止野指针的出现;
8) 引用底层是通过指针实现的;
9) 作为参数时也不同,传指针的实质是传值,传递的值是指针的地址;传引
用的实质是传地址,传递的是变量的地址。
2. 从汇编层去解释一下引用
1. 9: int x = 1;
2. 00401048 mov dword ptr [ebp-4],1
3. 10: int &b = x;
4. 0040104F lea eax,[ebp-4]
5. 00401052 mov dword ptr [ebp-8],eax
x 的地址为 ebp-4b 的地址为 ebp-8因为栈内的变量内存是从高往低进行分配
的。所以 b 的地址比 x 的低。lea eax,[ebp-4] 这条语句 x 的地址 ebp-4
eax 寄存器 mov dword ptr [ebp-8],eax 这条语句 eax 的值放入 b 的地址 e
bp-8 中上面两条汇编的作用即: x 的地址存入变量 b 中,这不和将某个变量的
地址存入指针变量是一样的吗?所以从汇编层次来看,的引用是通过指针来实
现的。
更多 IT 认证课程请访 美河学习在线 www.eimhe.com
3. C++中的指针参数传递和引用参数传递
1) 指针参数传递本质上是值传递它所传递的是一个地址值值传递过程中,被调函数的
形式参数作为被调函数的局部变量处理,会中开辟内存空间以存放由主调函数传
递进来的实参值从而形成了实参的一个副本(替身)值传递的特点是,被调函数对
形式参数的任何操作都是作为局部变量进行的,不会影响主调函数的实参变量的值(形
参指针变了,实参指针不会变)。
2) 引用参数传递过程中,被调函数的形式参数也作为局部变量在栈中开辟了内存空间,
是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参(本体)的任何
操作都被处理成间接寻址即通栈中存放的地址访问主调函数中的实参变量(根据别
名找到主调函数中的本体)因此,被调函数对形参的任何操作都会影响主调函数中的
实参变量。
3) 引用传递和指针传递是不同的,虽然他们都是在被调函数栈空间的一个局部变量,但
是任何对于引用参数的处理都会通过一个间接寻址的方式操作到主调函数中的相关变
量。而对于指针传递的参数,如果改变被调函数中的指针地址它将应用不到主调函数
的相关变量。如果想通过指针参数传递来改变主调函数中的相关变量(地址)那就得
使用指向指针的指针或者指针引用。
4) 从编译的角度来讲,程序在编译时分别将指针和引用添加到符号表上,符号表中记录的
是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,
而引用在符号表上对应的地址值为引用对象的地址值(与实参名字不同,地址相同)。
符号表生成之后就不会再改,因此指针可以改变其指向的对象(指针变量中的值可以
改),而引用对象则不能修改。
of 145
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜