考完了C++,对其中的一个“&”有很多的疑问,这个符号表示引用。“*”表示定义指针变量,“&”是取地址的运算符。引用与指针的区别是,指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。
举个例子:int a,&p; p=&a; a=*p;下面详细介绍下我对“&”的理解。
引用“&”是某一个变量的别名。但它不是求地址运算,只是起标识作用。应该注意的是声明引用时必须初始化,而且不能建立指向引用的指针,不能建立引用的引用,也不能建立引用数组。
引用的应用有三种:变量的引用、参数的引用、返回值的引用。
1.变量。
<span style="font-size:18px;">void main()
{
int m;
int &n=m; //为变量m引用别名n
m=1;
cout<<"m="<<m<<"n="<<n<<"\n";
n=2;
cout<<"m="<<m<<"n="<<n<<"\n";
}</span>
结果是m=1 n=2
m=1n=2
对m引用了别名n之后,对m或者n赋值,结果都是一样的。需要注意的是只是起了别名,并没有分配新的内存空间。
2.参数。
<span style="font-size:18px;">void swap(int &p1, int &p2) //此处函数的形参p1, p2都是引用
{ int p; p=p1; p1=p2; p2=p; }
main( )
{
int a,b;
cin>>a>>b; //输入a,b两变量的值
swap(a,b); //直接以变量a和b作为实参调用swap函数
cout<<a<< ' ' <<b; //输出结果
}</span>
输入1和2时,输出结果为1和2。
得出:传递引用和传递指针效果是一样的。这时被调用函数的形参就成为调用函数的变量的别名来使用,对于形参的操作就相当于对目标变量的操作。
3.返回值。
格式:类型标识符 &函数名(形参列表及类型说明)
{函数体}
<span style="font-size:18px;"><span style="color:#494949;">int a[]={1,3,5,7,9};
int &index(int); //声明引用函数
void main()
{
index(2)=25; //将a[2]重新赋值
cout<<index(2)<<endl;
}
int &index(int i)
{
return a[i];
}</span></span>
运行结果为25。这说明第三个元素被改成了25。