理解指向指针的引用 指向函数的指针

在做项目时,用到第三方的API:RequestService( string *reqst, string *&Rsp)

怎么来调用这个API呢?由于对指针的使用不熟悉,分别作了如下尝试:

(1)想当然,把2个参数都当作普通的指针:

string input="Help Me";

string output;

RequestService( &input, &output)

error: no matching function for call to ‘RequestService(string *,string*)’

note: candidates are: virtual int RequestService(string*, string*&)

(2)把第二个参数当成指向指针的指针

string input="Help Me";

string *output = NULL;

RequestService( &input, &output)

error: no matching function for call to ‘RequestService(string *,string**)’

note: candidates are: virtual int RequestService(string*, string*&)

可以看到,由于对指针和引用得不熟悉,连编译都过不了。

可见,在C++和C语言的编程中,理解指针是多么重要!

本文旨在抛砖引玉,着重探讨与前面例子相关的:指向指针的引用。

其实,函数:RequestService( string *reqst, string *&Rsp)的第一个参数是普通的指针类型,第二个参数Rsp是一个指向指针的引用 。因此,调用时,第一个参数传递参数地址就行,而第二个参数则需要传递一个指针变量给它。即正确调用方法为:

[cpp]view plaincopyprint?

stringinput="HelpMe";

string*output=NULL;

RequestService(&input,output)

这样,就可以编译通过了。

指向指针的引用是某一指针的别名,同变量的引用一样。引用绝对不是单独存在的,它一定是指示某个已经存在的东西的,它一定是某个已经存在的物体的"别名".

而且它如果被初始化赋值成某个变量后,它就始终是这个变量的替身.对引用的改变就是对这个变量的改变.

指向指针的引用的特殊点在于如下两点:

(1)指向指针的引用,不仅改变了指针所指的对象,也改变了指针本身。

为了方便读者的理解,我们看两种情况,代码稍有不同。

第一种情况:只有普通的引用,

第二种情况,使用了指向指针的引用。





(2)指向指针的引用,可以实现对传递给形参的实参数值的交换。即指向指针的引用可以修改指针的值,在参数传递时是传址。

[cpp]view plaincopyprint?

<prename="code">#include<iostream>

usingnamespacestd;

voidptrswap2(int*&v1,int*&v2)//指向指针的引用是某一指针的别名,同变量的引用一样,可以实现对传递给形参的实参数值的交换

{

int*temp=v2;//指针别名,当然以指针的形式来应用

v2=v1;

v1=temp;

}

voidptrswap1(int*v1,int*v2)//利用指针进行数值交换,改变的只是形参的指向,实参的值保持不变;

{

int*temp=v1;

v2=v1;

v1=v2;

}

intmain(){

inti=10;

intj=20;

int*pi=&i;

int*pj=&j;

cout<<"beforeswapusingpointerasparameter:pi="<<*pi<<"pj="<<*pj<<endl;

ptrswap1(pi,pj);

cout<<"afterswapusingpointerasparameter,thevaluethatpointerpointstodon'tchange"<<endl<<"::pi="<<*pi<<"pj="<<*pj<<endl;

inti2=10;

intj2=20;

int*pi2=&i2;

int*pj2=&j2;

cout<<"beforeswapusingReferenceofpointerasparameter::pi2="<<*pi2<<"pj2="<<*pj2<<endl;

ptrswap2(pi2,pj2);
理解指向指针的引用 指向函数的指针

cout<<"afterswap,thevaluethatpointerpointstochanged:pi2="<<*pi2<<"pj2="<<*pj2<<endl;

return0;

}</pre><br>

  

爱华网本文地址 » http://www.aihuau.com/a/25101013/186560.html

更多阅读

如何理解存单质权的效力中国法制新闻网 四川法制新闻网

如何理解存单质权的效力作者:陈娇娇 | 来源:中国法制新闻网 | 编辑:蔡金华 | 更新时间:2011-6-21 10:12:11 【字体: 小 大 简 繁 】 216存单质押权是在存单的特定债权上设定的担保物权,其性质是以存单权利为标的的权利质押。与其他权利

理解递归的工作原理 怎么理解递归

为了理解递归的工作原理,你需要追踪递归调用的执行过程,所以让我们来进行这项工作。追踪一个递归函数的执行过程的关键是理解函数中所声明的变量是如何存储的。当函数被调用时,它的变量的空间是创建于运行时堆栈上的。以前调用的函数的

理解指向指针的引用 指向函数的指针

在做项目时,用到第三方的API:RequestService( string *reqst, string *&amp;Rsp)怎么来调用这个API呢?由于对指针的使用不熟悉,分别作了如下尝试:(1)想当然,把2个参数都当作普通的指针:string input="Help Me";string output;RequestService(

怎么理解公共物品的非竞争性非排他性 公共物品 非排他性

怎么理解公共物品的非竞争性 非排他性非竞争性非竞争性是指该产品被提供出来以后,增加一个消费者不会减少任何一个人对该产品的消费数量和质量,其他人消费该产品的额外成本为零,换句话说,增加消费者的边际成本为零。以国防为例,尽管人

声明:《理解指向指针的引用 指向函数的指针》为网友听美妙的旋律分享!如侵犯到您的合法权益请联系我们删除