c++引用和指针区别_c++引用和指针区别

c++引用和指针区别_c++引用和指针区别????作者:Linux猿????简介:CSDN博客专家????,C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!????关注专栏:C/C++面试通关集锦(优质好文持续更新中……


🎈 作者: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$

上面的例子可以通过下图来理解: 

c++引用和指针区别_c++引用和指针区别

变量 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;
}

上面可以用下图来理解:

c++引用和指针区别_c++引用和指针区别

p 需要两次才能取到 a 的值,当然,还有多级指针,这里就不深入了。

(4)指针需要 (*)来引用值,而引用可以直接取值。

(5)指针支持算术运算,而引用不能。

(6)指针变量有地址,而引用的地址是引用变量的地址;


🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬 


今天的文章c++引用和指针区别_c++引用和指针区别分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/83319.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注