首先,先来明白一下什么是引用变量。
一个变量可以声明为一个引用,它起着该变量的别名的作用。对引用进行操作,实际上就是对被引用的变量进行操作。
引用运算符:&;
定义的一般形式:数据类型 &引用变量名=变量名;
如:
int num;
int &ref=num;
ref被定义为一个int型引用,并初始化为对整型变量num的引用。即为整型变量num取一个别名ref,ref就称为对num的引用,num称为ref的引用对象。
那么,可能就会疑惑了,我又给变量起一个别名是干嘛呢?这不是多此一举吗?它有什么作用呢?
其实它主要是用在函数参数的传递上。
比如,我们看这个例子
void aplusplus(int a)
{a++;
}
int main()
{int x=5;aplusplus(x);cout<<x;
}
这个是想对x进行自增运算,但是这个的运行结果是
5
那么运用引用后呢?
void aplusplus(int &a)
{a++;
}
int main()
{int x=5;aplusplus(x);cout<<x;
}
这个的运行结果是
6
可以看出,函数中的数修改后,并不会对主函数中的数有影响。但是我们希望函数能够修改主函数中的数,所以我们引用。这样对a做修改,就是对主函数中的x做修改。
那么在没有用函数传递参数之前是怎样做的呢?
void aplusplus(int *p)
{(*p)++;
}
int main()
{int x=5;aplusplus(&x);cout<<x;
}
这个看起来就不如使用引用的简便了吧。
引用时需要注意:
1.引用必须初始化,即由已经有的同类型变量对其进行初始化,之后,前者就是后者的一个别名。
2.引用不是变量,所以引用本身不能被修改,在程序中对引用的存取都是对他所引用的变量的存取。
3.引用与指针不同,指针的内容或值是其一变量的内存单元地址,而引用则与初始化它的变量具有相同的内存单元地址。
对3做个解释:
就是指针本身的地址和指针所指向的变量的地址是不一样的
代码:
int main()
{int *p,a=3;p=&a;int **pp;pp=&p;cout<<"p="<<p<<endl;cout<<"&p="<<&p<<endl;cout<<"*p"<<*p<<endl;cout<<"**pp="<<**pp<<endl;
}
运行结果:
再看引用:
int main()
{int a=3;int &x=a;cout<<"a的地址"<<&a<<endl;cout<<"x的地址"<<&x<<endl;
}
运行结果: