#include<iostream>
using namespace std;
int main(){
int intOne=0;
int&rint=intOne;
intOne=5;
cout<<intOne<<endl;
cout<<rint<<endl;
rint=7;
cout<<intOne<<endl;
cout<<rint<<endl;
cout<<&(intOne)<<endl;//17 18用于检验intOne和rint的地址,结果两者地址是相同的
cout<<&(rint)<<endl;
return 0;
}
using namespace std;
int main(){
int intOne=0;
int&rint=intOne;
intOne=5;
cout<<intOne<<endl;
cout<<rint<<endl;
rint=7;
cout<<intOne<<endl;
cout<<rint<<endl;
cout<<&(intOne)<<endl;//17 18用于检验intOne和rint的地址,结果两者地址是相同的
cout<<&(rint)<<endl;
return 0;
}
引用和变量指向同一个存储单元
引用一旦初始化,他就维系在一定的目标上,再也不分开
引用的概念
引用是别名,在声明时必须初始化,在实际代码中主要作函数的形式函数
为了建立引用,先写上目标的类型,再加上引用运算符“&”,然后是引用的名字
指针是变量 可以把它赋值成指向别处的地址
建立引用时必须初始化(如上int intOne=0)并且绝不会在关联其他不同的变量
注意事项:1、void引用是不合法的
2、数组没有引用
3、没有引用的指针和引用的引用
4、有空指针但是无空引用
传递引用给函数与传递指针效果一样
用引用作为参数比使用指针有更清晰的语法
Eg.
void swap(int&x,int&y)//引用作为参数
Void swap(int&x,int&y)//函数实现几乎和原来一样
{
int temp;
temp=x;
x=y;
y=temp;
}
Void swap(int *x,int*y)//定义指针的函数参数
{
int temp;
temp=x;
x=y;
y=temp;
}
以上的两种交换,在主函数中变量的原地址不会发生改变。
2021.3.20补充
引用和指针作为函数参数都可以完成相同的功能,但是引用和指针在定义和使用上有根本的区别;
(1)引用创建时必须被初始化,而指针定义时可以被初始化,也可以不被初始化。
(2)引用一旦被初始化与某个对象建立了关联,在其生命期不能再引用其他对象;而指针可以任何时候转而指向其他对象的地址
(3)不允许存在空引用,引用创建时必须与某个具有有效内存空间的对象建立关联;c++允许存在空指针。
(4)引用是与地址间接产生联系;指针变量的内容就是地址,与地址直接产生联系。
(5)引用不占内存空间,指针占用内存空间。
(6)不存在引用的引用,指针可以有引用。
例如
int *p;//定义指针变量p
int * &rp=p;//创建p的引用rp,ro也是指针类型
int m=10;//定义int变量m
rp = &m;//rp存储m的地址