C++中引用和指针的区别

简介: 1. 引用其实就是一个别名,它用于定义一个变量共享另一个变量的内存空间,变量是内存空间的名字,如果给内存空间起另外一个名字,就能够共享这个内存。


1. 引用其实就是一个别名,它用于定义一个变量共享另一个变量的内存空间,变量是内存空间的名字,如果给内存空间起另外一个名字,就能够共享这个内存。

2. 指针则是指向一个内存空间的变量,可以通过指针来查看某个内存空间的内容,而指针本身在32位机器下占据4个字节的空间


指针和引用的区别有以下几个方面

(1)指针是一个存放变量地址的变量,它可以被改变即可以指向不同的地址空间;

         引用只是一个别名,它的存在是具有依附性的,引用必须一开始就初始化,并且引用的对象不能被改变只能引用某一个对象。

(2)指针作为函数参数传递的时候实际上是值传递的方式,只要不修改形参指针指向内存空间的值,任何对形参指针的修改对实参都是没有影响的;如果要在形参中改变引起实参改变可以使用指针的指针或指针引用。

         引用作为函数参数传递的时候实际上对形参引用的修改就是直接修改实参对象。

(3)指针的值可以改变;引用只能在定义的时候初始化一次,之后就不能更改了。

(4)指针可以为NULL;引用不能为NULL,引用必须对应某个存储单元。

(5)对指针求sizeof结果是4;对引用求sizeof是对象的大小。

(6)如果要返回动态分配的内存必须使用指针,不能使用引用。

         char *p = (char *)malloc(4*sizeof(char)) 或 char *p = new char[4]


举例:

1. int x = 5;

    int y = 10;

    int *a = &x //指针a指向x的地址

    int &b = a  //引用b是a内存空间的一个别名

    a = &y       //指针a可以指向y的地址

    b = y         //这个时候操作b相当于a的值变成了10,此时a和b的值都是10

    int &c = NULL //这个是错误的,没有空引用

    int *d = NULL  //这个是正确的,有空指针


2. 函数是使用

    void Fun(int *p){} //如果实参是指针,函数形参也是指针,这个时候实际上是值传递,只要不修改p指向内存空间的内容,其它的任何对形参的操作对实参都是没有影响的

    void Fun(int **p){} //如果实参是指针,可以利用指针的指针来传递,这个时候实际上是地址传递对形参的修改就是修改实参

    void Fun(const int &a){} //常量引用,保证函数体只是对引用a只读,而无法修改,提高效率



目录
相关文章
|
29天前
|
JSON JavaScript 前端开发
C++ 智能指针与 JSON 处理:高级编程技巧与常见问题解析
C++ 智能指针与 JSON 处理:高级编程技巧与常见问题解析
264 0
|
15天前
|
存储 C++
C++指针
C++指针
|
26天前
|
存储 编译器 C语言
【c++】类和对象(二)this指针
朋友们大家好,本节内容来到类和对象第二篇,本篇文章会带领大家了解this指针
【c++】类和对象(二)this指针
|
27天前
|
存储 编译器 C语言
【C++练级之路】【Lv.2】类和对象(上)(类的定义,访问限定符,类的作用域,类的实例化,类的对象大小,this指针)
【C++练级之路】【Lv.2】类和对象(上)(类的定义,访问限定符,类的作用域,类的实例化,类的对象大小,this指针)
|
28天前
|
监控 安全 算法
悬垂引用与临时对象在C++中的深入探讨: 风险、原因与预防策略
悬垂引用与临时对象在C++中的深入探讨: 风险、原因与预防策略
54 3
|
28天前
|
算法 编译器 程序员
深入理解C++编译模式:了解Debug和Release的区别
深入理解C++编译模式:了解Debug和Release的区别
62 2
|
29天前
|
存储 安全 数据库连接
【C++智能指针】深入探究C++智能指针:自定义删除器的设计与选择
【C++智能指针】深入探究C++智能指针:自定义删除器的设计与选择
82 0
|
29天前
|
存储 安全 编译器
【C++ 函数设计的艺术】深挖 C++ 函数参数的选择 智能指针与 std::optional:最佳实践与陷阱
【C++ 函数设计的艺术】深挖 C++ 函数参数的选择 智能指针与 std::optional:最佳实践与陷阱
108 0
|
13天前
|
存储 C语言
C语言 — 指针进阶篇(下)
C语言 — 指针进阶篇(下)
20 0
|
13天前
|
存储 C语言 C++
C语言 — 指针进阶篇(上)
C语言 — 指针进阶篇(上)
26 0