指针及函数的的参数传递

指针及函数的的参数传递

ID:16498643

大小:41.50 KB

页数:4页

时间:2018-08-10

指针及函数的的参数传递_第1页
指针及函数的的参数传递_第2页
指针及函数的的参数传递_第3页
指针及函数的的参数传递_第4页
资源描述:

《指针及函数的的参数传递》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、指针及函数的的参数传递李伟军本文分为两大类,一类为指针,另一类为函数的说明,两者分别分为C和C++进行说明;主要是对函数的说明,主要都用例子进行说明。一、指针:1.C:如:inta=3;//这句话在存储器里开出一定的空间来存储a;int*pa=&a;//这名话在存储器里开出一定的空间来存储pa;//总结说明:不要把指针当什么特殊的东西,它也是一个变量,只是用来存储别人的地址的,在上面有关系里有:*paa;因此对pa的操作不影响a或者是&a,但对*pa的操作就是对a的操作。2.C++:C中的描述都适用在C++中,只是在C++中又引入了引用这

2、一概念。如:inta=3;//这句话在存储器里开出一定的空间来存储a;int&ad=a;//这句话并不开辟空间来存储ad;//总结说明:引用就是取了个别名,不是新的变量,在上面的关系里有ada;因此对ad的操作就是对a的操作。二、函数:1.C:1.)函数的声明:返回类型函数名(形参表);2.)函数的定义:即函数的实现,返回类型函数名(形参表){实现内容}3.)函数的调用:函数名(实参表);4.)参数的传递:参数的传递准确的说只有值传递,就像之前说有不要把指针当做什么特殊的东西。但很多人还是把值传递分成值传递和地址传递。a.)一般的值传递:

3、如:函数的声明:voidfunc(intd1);函数的调用:inta=2;func(a);//此时在后台执行了d1=a;//总结说明:因为进行了值的赋值,因此在func内部使用d1就和a无关,即在函数内部的操作不会影响到a的值。a.)指针式的值传递(即地址传递):如:函数的声明:voidfunc(int*pd1);函数的调用:inta=2;func(&a);//此时在后台执行了pd1=&a;//总结说明:因为进行了值的赋值,因此在func内部使用pd1就在a或者&a无关,不会影响在a的值;而*pd1a,因此对*pd1的操作就是对a的操作,

4、即所谓的在函数内部修改外部的值。由a.b.可以看出,一般的值传递和指针式的值传递在本质上是一样的,再看过C++中的引用传递之后你会发现真正的不同。2.)通过返回值传值:a.)一般的值传递:如:函数的定义:intfunc(){intt1=3;returnt1;}出这个花括号前t1会被销毁;函数的调用:inta=func();此时后台进行的操作有:i.inttemporary=t1;ii.销毁t1;iii.出花括号;iv.a=temporary;v.销毁temporary。b.)指针式的值传递:如:函数的定义:int*func(){intt1

5、=3;return&t1;}出这个花括号前t1会被销毁;函数的调用:int*a=func();此时后台进行的操作有:i.)int*temporary=&t1;ii.)销毁t1;iii.)出花括号;iv.)a=temporary;v.)销毁temporary。vi.)//注意,因为*temporary就是t1,而t1在出函数时已被销毁,因此这个函数的编译会产生warning,准确的说,这种使用方式是不正确的。正确的使用是,返回的值在出函数时能正常的存在就可以了,如:返回的是全局变量的地址,static变量的地址,用malloc申请的堆空间。

6、int*func(){int*t1=(int*)malloc(sizeof(int));*t1=3;returnt1;}1.C++:1.)参数的引用传递:之前在C中所有的参数传递方式都适用在C++中,C++又引入了引用传递。a.)一般的引用:函数的声明:voidfunc(int&d1);函数的调用:inta=2;func(a);后台认为:d1a;因此对d1的操作就是对a操作,d1并没有开辟出新的空间。b.)指针的引用:函数的声明:voidfunc(int*&d1);函数的调用:inta=2;func(&a);后台认为:d1&a;因此对d1

7、的操作就是对&a操作,d1并没有开辟出新的空间对*d1的操作就是对a的操作。2.)传回值的引用传递:如:函数的定义:int&func(){intt=3;returnt;}函数的调用:inta=func();执行顺序:i.)inttemporaryt;//无空间的开辟ii.)销毁t;iii.)出花括号;iv.)a=temporary;v.)不进行temporary进行销毁,因为它(即t)已经被销毁过了;//注意,因为temporary就是t,而t在出函数时已被销毁,因此这个函数的编译会产生warning,准确的说,这种使用方式是不正确的。1

8、.)类成员函数的调用:如:类的声明和定义:classAAA{intdi;public:voidfunc(intd1){dd=d1;//this->dd=d1;}};类成员函数的调用:intd=

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。