博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】函数中的形参问题(指针形参、引用形参、二重指针作为形参)
阅读量:5160 次
发布时间:2019-06-13

本文共 994 字,大约阅读时间需要 3 分钟。

(1)用指针传递参数,可以实现对实参进行改变的目的,是因为传递过来的是实参的地址,因此使用*a实际上是取存储实参的内存单元里的数据,即是对实参进行改变,因此可以达到目的。在使用的过程中需要通过对地址的解引用来操作其所指向的变量,同时可以通过指针的自增自减移动从而改变所指向的值,灵活度较大。

(2)引用作为函数参数进行传递时,实质上传递的是实参本身,即传递进来的不是实参的一个拷贝,因此对形参的修改其实是对实参的修改.因而函数返回后作出的修改会依旧存在,引用传递可以节省复制所需要的时间和空间。

 

(3)对于二重指针的使用情况:对于链表和树或char*字符串时,这些本身就是指针类型,当需要通过形参带回变化后的结果时,又要使用指针作参数,所以使用二重指针作为形参。如果函数传参采用一级指针时,解引用时只能改变该指针指向的头或根结点,而不能影响整个链表或树这个结构。

定义链表结构时,LinkList(也就是LNode *)H代表的是整个链表,函数传址调用时,实参传递的是地址值。当采用二级指针形参LinkList *L(也就是LNode **)时,要传递链表的起始地址&H给形参L,而采用一级指针形参LNode *L时,传递的是头结点的地址&(*H)(也就是头指针H)。
针对以上情况也可以使用指针的引用来代替二重指针,以下是分别用二重指针和指针引用作为形参的示例程序:

#include
using namespace std;void test(int **p) //以指针类型变量的地址作为形参{ int a=1; *p=&a; //*p作为一个指针变量存放的是变量a的地址 cout<<*p<<" "<<**p<

下面是利用形参为指针的引用的函数:

#include
using namespace std;void test(int *&p){ int a=1; p=&a; cout<

<<" "<<*p<

  

可以看出利用指针的引用相较二重指针达到了相同的功能,但比使用二重指针要简单明了(与一重指针相似)

 

 

【】

 

转载于:https://www.cnblogs.com/skullboyer/p/9050636.html

你可能感兴趣的文章
xml序列化及反序列化.net对象
查看>>
需要我们了解的SQL Server阻塞原因与解决方法
查看>>
customize Vimium
查看>>
Chemistry
查看>>
mysql的Event 及 时间 操作
查看>>
python中的魔法属性
查看>>
心急的C小加
查看>>
编译原理 First,Follow,select集求法
查看>>
maven package跳过测试
查看>>
不要轻易相信用户
查看>>
javascript
查看>>
【LOJ】#2549. 「JSOI2018」战争
查看>>
MYSQL逆向工程generatorConfig
查看>>
Microsoft Visual Studio 2010(vs10)安装与使用
查看>>
sitecore系列教程之Sitecore个性化-体验概况概述
查看>>
【洛谷】P1876 开灯
查看>>
本周总结
查看>>
关于“/”应用程序中的服务器错误 之解决方案
查看>>
php编译安装参数说明
查看>>
Windows推包脚本
查看>>