收藏 分享(赏)

指针_引用总结.doc

上传人:gnk289057 文档编号:7817050 上传时间:2019-05-26 格式:DOC 页数:8 大小:68.50KB
下载 相关 举报
指针_引用总结.doc_第1页
第1页 / 共8页
指针_引用总结.doc_第2页
第2页 / 共8页
指针_引用总结.doc_第3页
第3页 / 共8页
指针_引用总结.doc_第4页
第4页 / 共8页
指针_引用总结.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、指针与引用:引用只是它绑定的对象的另一个名字(别名),作用在引用上的所有操作事实上都是作用在该引用绑定的对象上。const引用:const 引用是指向 const 对象的引用:const int ival = 1024; const int / ok: both reference and object are const int / error: non const reference to a const object可以读取但不能修改 refVal ,因此,任何对 refVal 的赋值都是不合法的。这个限制有其意义:不能直接对 ival 赋值,因此不能通过使用 refVal 来修改iva

2、l。同理,用 ival 初始化 ref2 也是不合法的:ref2 是普通的非 const 引用,因此可以用来修改 ref2 指向的对象的值。通过 ref2 对 ival 赋值会导致修改 const 对象的值。为阻止这样的修改,需要规定将普通的引用绑定到 const 对象是不合法的。const引用可以初始化为不同类型的对象或者初始化为右值,如字面值常量:int i = 42; / legal for const references only const int const int 同样的初始化对于非 const 引用却是不合法的,而且会导致编译时错误。例:int /错误:非常量引用的初始值必须

3、为左值非 const 引用只能绑定到与该引用同类型的对象。 const 引用则可以绑定到不同但相关的类型的对象或绑定到右值。int main(int argc,char* argv)double ival=1.01;const int const int /int /错误/ int / 错误:非常量引用的初始值必须为左值return 0;指针和引用的区别:引用是C+中的概念相同点:都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名。不同点:1. 指针是一个实体,而引用仅是个别名。2. 从内存上来讲 系统为指针分配内存空间,而引用与绑定的对象共享内存空间,系统不

4、为引用变量分配内存空间。3. 引用定义的时候必须要初始化,指针则可以在任何时候被初始化。4.引用只能在定义时被初始化一次(初始化以后不允许再重新绑定对象),之后不可变;而指针初始化以后可以改变指向的对象;5. 引用不能为空,指针可以为空(NULL);6.引用的大小是所指向的变量的大小,因为引用只是一个别名而已;指针是指针本身的大小。“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小(4yte); 7.指针和引用的自增(+)运算意义不一样; 例如就+操作而言,对引用的操作直接反应到所指向的对象(值+) ,而不是改变

5、指向;而对指针的操作,会使指针指向下一个对象,而不是改变所指对象的内容int main(int argc,char* argv)int i=10;intref+;cout形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。指针传递:指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。(这里是在说,当形参

6、的指向变化时,实参指针本身的地址值(指向)不会变,(但如果函数通过形参改变所指向地址里面存储的内容,则实参访问该地址里面的内容时,是改变过的内容,所以如果要改变指向地址里面的内容,给函数传递指针参数,不需要返回)引用传递:而在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。引用传递和指针传递是不同的,虽然它们都是在被调函数栈空间上的一个局部变量,但是任何对于引用参

7、数的处理都会通过一个间接寻址的方式操作到主调函数中的相关变量。而对于指针传递的参数,如果改变被调函数中的指针地址,它将影响不到主调函数的相关变量。如果想通过指针参数传递来改变主调函数中的相关变量,那就得使用指向指针的指针,或者指针引用。下面的代码对此作出了细致解释(从实参,形参在内存中存放地址的角度 说明了问题的本质,容易理解 )#includeusing namespace std;/值传递void change1(int n)cout#includeusing namespace std;void change(int*a,int b=3;*a=2;int main()int a=1,b=2,c=3;change(coutabc;/2,3,3return 0;函数返回值:char* GetMemory()char p=“hello“;return p;/正确,char*是指针,返回的是一个地址char* GetMemory()char p=h;return p;/错误char* GetMemory()char p=h;return /正确

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报