🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏:C/C++面试通关集锦 (优质好文持续更新中……)🚀
在 C/C++ 使用过程中,经常会使用指针和引用,那它们两个是什么区别呢?本文就来详细讲解一下!
指针:是保存另一个变量内存地址的变量,指针通过 * 访问保存的内存地址所指向的值;
引用:是另一个变量的别名,一旦被初始化就不能被改变,引用可以认为是一个具有自动间接性的常量指针,相当于编译器帮助实现了自动间接性取值,即:编译器帮助加上了 * 。引用内部实现为指针。
指针是在 C 语言中就已存在,功能非常强大,但是许多的不安全因素也都是指针导致的。引用是 C++ 中引入的概念,引用使用起来更加安全。
但是,C++引入引用的直接原因是支持 C++ 重载,来看下面一个例子:
//没有引用的情况下
void func1(const complex* x, const complex* y)
complex z = *x+*y;
// ...
}
//有引用的情况下
void func2(const complex& x, const complex& y)
complex z = x+y;
// ...
}
可以看到,在引入引用后,两数相加更加合理,是无感知的,而没有引用的情况下,能明显看到和普通加法运算不同。
但指针和引用都有一个相同点:实现让一个变量对另一个变量的访问。
来通过一个简单例子加深下理解:
#include <iostream>
using namespace std;
int main() {
int x = 10;
int *p = &x;
int &y = x;
cout<<"*p = "<<*p<<endl;
cout<<" y = "<<y<<endl;
}
输出为:
linuxy@linuxy:~/pointerRef$ g++ main.cpp -o main
linuxy@linuxy:~/pointerRef$ ./main
*p = 10
y = 10
linuxy@linuxy:~/pointerRef$
上面的例子可以通过下图来理解:
变量 p 存储 x 的地址,x 和 y 都是 10 的名称。
接下来详细的讲解一下区别。
(1)初始化不同
指针可以先定义,再初始化,可以重复赋值。引用必须定义时初始化,一旦被初始化,就不能改变,类似于 const 定义常量。来看一个例子:
int main() {
int a = 10;
//定义和赋值分开
int *p;
p = &a;
//定义时赋值
int *q = &a;
int &r = a;
/*
错误情况
int &r;
&r = a;
*/
//定义时必须初始化
const int c = 10;
}
(2)赋值NULL
指针可以使用 NULL 赋值为空,引用不可以;
(3)指针可以多级,引用只能一级;
来看一个例子:
int main() {
int a = 10;
int *q = &a;
int **p = &q;
cout<<"**p = "<<**p<<endl;
}
上面可以用下图来理解:
p 需要两次才能取到 a 的值,当然,还有多级指针,这里就不深入了。
(4)指针需要 (*)来引用值,而引用可以直接取值。
(5)指针支持算术运算,而引用不能。
(6)指针变量有地址,而引用的地址是引用变量的地址;
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
今天的文章c++引用和指针区别_c++引用和指针区别分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/83319.html