众所周知,&是取地址,函数参数前有&是传递地址,*是指针;那*&有什么用呢?下面先看一下众多网友的解释
对于int *&a:
1.int*& a: a is a reference of pointer to int
2.c++里面的引用,a是对另一个int *类型变量的引用;
3.指向指针的指针;
4.原来a不是int类型,比如说是char类型,那么&a得到的应该是char*类型,现在使用int*强制转换到int*类型。
观上几种解释,我认为1、2、3是有道理的,4是牛头不对马嘴。
首先,必须要说明的是*&是有用的,效果和单独一个*或&是不同的,对引用有所了解的同学对于引用的引用(指针的指针)也不难理解。下面我们先做个试验
我们要了解变量需要一个空间存储的,这就引出了变量的地址,参数传递是就可以传递地址过去;那么我们也可以把地址放到一个存储空间里,这就有了地址的地址,这里就不得不说一下'->'这个符号,他能从地址或地址的地址找到对象:eg如有一结构体SqList,,方法 void CreateList(SqList *&L.....) 方法中L->data[i] = a[i]。所以传递地址的地址时不必担心使用的复杂。
//程序1
#include <iostream>
using namespace std;
void test(int *&p,int &a)
{
cout<<&p<<endl;
//cout<<&a<<endl;
}
int main()
{
int a = 0;
int *p = &a;
cout<<&p<<endl;
//cout<<&a<<endl;
test(p,a);
return 0;
}
这个 程序输出的两个值一样大小一样,说明存储int指针的地址是一样的
//c程序2
#include <iostream>
using namespace std;
void test(int *p,int &a)
{
cout<<&p<<endl;
//cout<<&a<<endl;
}
int main()
{
int a = 0;
int *p = &a;
cout<<&p<<endl;
//cout<<&a<<endl;
test(p,a);
return 0;
}
这个 程序输出的两个值不一样,说明存储int指针的地址不相同的
在程序1中可修改p的值,在函数结束后仍能保存修改修改方式可直接为 p = ...
在程序2中有两种修改方式:1. p = b;2. *p = 4。其中1修改的结果不能再函数外有效,2可以在函数外有效
简而言之,使用*和使用*&要看希望的效果是什么。