举例:
test(int number1, int &number2){
第一个参数: 是普通的指针
第二个参数: 是一个指向指针的引用.调用时,第一个参数传递参数地址就行,而第二个参数则需要传递一个指针变量给它
调用方法:
int num1 = 123;
int *num2 = 2342;
test(&num1, num2);
指向指针的引用是某一指针的别名,同变量的引用一样。引用绝对不是单独存在的,它一定是指示某个已经存在的东西的,它一定是某个已经存在的物体的”别名”.
如果被初始化赋值成某个变量后,它就始终是这个变量的替身.对引用的改变就是对这个变量的改变.(1)指向指针的引用,不仅改变了指针所指的对象,也改变了指针本身。
代码举例: 文件后缀是.cpp如果是.c 编译通不过
#include<stdio.h>
//引用
void quote(){
int a= 1;
int b = 2;
int *temp = &a;
int *&p = temp;
p = &b;
*p = 5;
printf("\n 引用 \n a is: %d \n b is: %d \n *temp is: %d\n *p is: %d\n", a, b, *temp, *p);
}
//指针
void pointer(){
int a= 1;
int b = 2;
int *temp = &a;
int *p = temp;
p = &b;
*p = 5;
printf("\n 指针 \n a is: %d \n b is: %d \n *temp is: %d\n *p is: %d\n", a, b, *temp, *p);
}
int main(void){
pointer();
quote();
return 0;
}
结果:
(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=v1;
v2=v1;
v1=v2;
}
int main(){
int i=10;
int j=20;
int *pi=&i;
int *pj=&j;
cout<<"before swap using pointer as parameter: pi="<<*pi<<" pj="<<*pj<<endl;
ptrswap1(pi,pj);
cout<<"after swap using pointer as parameter, the value that pointer points to don't change"<<endl<<":: pi="<<*pi<<" pj="<<*pj<<endl;
int i2=10;
int j2=20;
int *pi2=&i2;
int *pj2=&j2;
cout<<"before swap using Reference of pointer as parameter:: pi2="<<*pi2<<" pj2="<<*pj2<<endl;
ptrswap2(pi2,pj2);
cout<<"after swap, the value that pointer points to changed: pi2="<<*pi2<<" pj2="<<*pj2<<endl;
return 0;
}
结果: