博主主页:LiUEEEEE
C++专栏
C语言专栏
数据结构专栏
排序算法专栏
力扣牛客经典题目专栏
1、引用的概念
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
例如:李逵,在家称为"铁牛",江湖上人称"黑旋风"。
2、引用的使用方式
引用的使用方式为:
- 类型& 引用变量名(对象名) = 引用实体;
例如:
int main()
{
int a = 10;
int& p = a;
cout << "a = " << a << endl;
p += 10;
cout << "a = " << a << endl;
return 0;
}
C++中的引用类似于C语言的指针,但又区别于指针,指针是通过保存变量的地址,间接对其进行操作,而C++中的引用,就可以看作是其本体,可直接对其进行操作。
3、引用的注意事项
在C++中使用引用时,需注意权限的变化,权限只可以平移或变小,不可以变大,下文将对其进行解释。
3.1、权限的放大(错误示范)
int main()
{
const int a = 10;
int& p = a;
cout << "a = " << a << endl;
p += 10;
cout << "a = " << a << endl;
return 0;
}
在引用过程中,若对已经使用 const 保护起来的变量a进行引用,如上图所示,会出现报错,因为变量a的值不可以被改变,而引用者p却是可以改变的,发生了权限的放大,不可取。
3.2、权限的平移
int main()
{
const int a = 10;
const int& p = a;
cout << "a = " << a << endl;
cout << "p = " << p << endl;
return 0;
}
当对前一段代码做如上的更改,即可成功运行,上图中代码的引用也就是权限的平移。
3.3、权限的缩小
int main()
{
int a = 10;
const int& p = a;
cout << "a = " << a << endl;
a += 10;
cout << "a = " << a << endl;
//p += 10;
return 0;
}
当引用时加入了const来修饰,所代表的意思是,不可以通过引用者p对实体a进行操作,但可以通过实体a来改变a的值,如上所示。
3.4、临时变量具有常性(不可被修改)
int main()
{
double x = 12.34;
int i = x;
int& r1 = x;
const int& r1 = x;
return 0;
}
如上图所示,我们将浮点型变量 x 的值赋值给整形 i 时,会发生隐式类型转换,但转换时不是直接将 x 的值转换为整型赋值给 i ,而是通过临时变量,将 x 的整数部分提取出来,给予临时变量,再通过临时变量将值赋予i,而同样的,在引用x的值时我们引用者所引用的不再是浮点型 x ,而是类型转换后的临时变量,而临时变量又有常性,不可被修改,所以不可以直接如图上所示直接引用,需要加上const来让他的权限平移,否则就会如图所示报错。
4、引用与指针的区别
在C++中引用与指针可以同时使用,但是他们却有一些区别,在语法上,引用时引用者不开辟空间,而指针的使用需要开辟空间,且指针不论指向什么类型,其大小固定。
但在底层汇编逻辑上,指针与引用并无区别,都开辟了一个空间来存放地址,只不过在C++编译器中明面上不显示引用所开辟的空间。
5、结语
十分感谢您观看我的原创文章。
本文主要用于个人学习和知识分享,学习路漫漫,如有错误,感谢指正。
如需引用,注明地址。