指针引用(转载)
来源:互联网 发布:java中怎么表示sinx 编辑:程序博客网 时间:2024/06/05 10:51
在做项目时,用到第三方的API:RequestService( string *reqst, string *&Rsp)
怎么来调用这个API呢?由于对指针的使用不熟悉,分别作了如下尝试:
(1)想当然,把2个参数都当作普通的指针:
(2)把第二个参数当成指向指针的指针
可见,在C++和C语言的编程中,理解指针是多么重要!
本文旨在抛砖引玉,着重探讨与前面例子相关的:指向指针的引用。
其实,函数:RequestService( string *reqst, string *&Rsp)的第一个参数是普通的指针类型,第二个参数Rsp是一个指向指针的引用 。因此,调用时,第一个参数传递参数地址就行,而第二个参数则需要传递一个指针变量给它。即正确调用方法为:
指向指针的引用是某一指针的别名,同变量的引用一样。引用绝对不是单独存在的,它一定是指示某个已经存在的东西的,它一定是某个已经存在的物体的"别名".
而且它如果被初始化赋值成某个变量后,它就始终是这个变量的替身.对引用的改变就是对这个变量的改变.
指向指针的引用的特殊点在于如下两点:
(1)指向指针的引用,不仅改变了指针所指的对象,也改变了指针本身。
为了方便读者的理解,我们看两种情况,代码稍有不同。
第一种情况:只有普通的引用,
第二种情况,使用了指向指针的引用。
怎么来调用这个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是一个指向指针的引用 。因此,调用时,第一个参数传递参数地址就行,而第二个参数则需要传递一个指针变量给它。即正确调用方法为:
string input="Help Me"; string *output = NULL; RequestService( &input, output)这样,就可以编译通过了。
指向指针的引用是某一指针的别名,同变量的引用一样。引用绝对不是单独存在的,它一定是指示某个已经存在的东西的,它一定是某个已经存在的物体的"别名".
而且它如果被初始化赋值成某个变量后,它就始终是这个变量的替身.对引用的改变就是对这个变量的改变.
指向指针的引用的特殊点在于如下两点:
(1)指向指针的引用,不仅改变了指针所指的对象,也改变了指针本身。
为了方便读者的理解,我们看两种情况,代码稍有不同。
第一种情况:只有普通的引用,
第二种情况,使用了指向指针的引用。
(2)指向指针的引用,可以实现对传递给形参的实参数值的交换。即指向指针的引用可以修改指针的值,在参数传递时是传址。
#include <iostream>using namespace std;void ptrswap2(int *&v1,int *&v2)//指向指针的引用是某一指针的别名,同变量的引用一样,可以实现对传递给形参的实参数值的交换 { int *temp=v2;//指针别名,当然以指针的形式来应用 v2=v1; v1=temp; } void ptrswap1(int *v1,int *v2)//利用指针进行数值交换,改变的只是形参的指向,实参的值保持不变; { int *temp=v2; v2=v1; v1=temp; } int main(){ int i=10; int j=20; int *pi=&i; int *pj=&j; cout<<"before: pi="<<*pi<<" pj="<<*pj<<endl; ptrswap1(pi,pj); //ptrswap1(&i,&j); //会编译出错,一定要传个指针才行cout<<"after:"<<" pi="<<*pi<<" pj="<<*pj<<endl; cout<<"i = "<<i<<"j="<<j<<endl;//值没有变 int i2=10; int j2=20; int *pi2=&i2; int *pj2=&j2; cout<<"before: pi2="<<*pi2<<" pj2="<<*pj2<<endl; ptrswap2(pi2,pj2); //ptrswap2(&i2,&j2); //会编译出错,一定要传个指针才行cout<<"after: pi2="<<*pi2<<" pj2="<<*pj2<<endl; cout<<"i = "<<i<<"j="<<j<<endl;//值没有变,变的只是传入指针的值return 0; }
- 指针引用(转载)
- 引用与指针的区别(转载)
- 引用MFC指针的获取(转载)
- C++中的指针与引用(转载)
- const修饰指针和引用释疑(转载)
- c++值传递 指针传递 引用传递详解(转载)
- c++ 指针和引用的区别(转载)
- C++中引用和指针的区别(转载)
- 浅谈C++中指针和引用的区别(转载)
- 2.C++:c++引用与指针的区别(转载)
- 详解c++指针的指针和指针的引用-转载
- C++中的指针与引用 --转载
- 函数指针和函数引用(转载)
- 指针的引用(* &)
- 指针的引用(*&)
- 【转载】C++中引用传递与指针传递区别(进一步整理)
- [转载]C++中引用传递与指针传递区别(进一步整理)
- 野指针(转载)
- 培训链接
- 1041:奇偶位互换
- [转]推荐系统(Recommender System)的技术基础
- 关于头文件中常量和静态常量的用处
- 学习的最高效率就是马上应用或者教给别人
- 指针引用(转载)
- Makefile 中 echo 和@echo的区别
- 三层架构及其优缺点(收藏)
- 建立AJAX通信的步骤
- Spring事务管理—aop:pointcut expression解析
- 研磨设计模式 之 解释器模式(Interpreter)2——跟着cc学设计系列
- Tutorial: iOS 6 Auto Layout versus Springs and Struts - Part 3 of 3
- ORACLE表空间的各种统计
- C#之批量修改文件名