引用和指针的区别

标签: 指针  引用c++

1.
指针是一个变量,一个实体,开辟空间,存放指向空间的地址。
引用是一个别名,不开辟空间。

int a=10;
int *p=&a;
int &b=a;

2.
引用–没有空引用,必须初始化
指针–可以等于NULL

int *p=NULL;

3.
引用–不分等级,没有所谓的二级引用
指针–有二级,三级,等多级指针

int *p;
int * *p;
int * * *p

4 .
指针初始化后可以改变
引用初始化后不能改变

     int a=10;
     int b=12;
     int *p=NULL;
     p=&a;
     p=&b;
     int &b=a;==>int *const b=&a;

5.
sizeof(引用)是被引用对象的大小;
Sizeof(指针)恒等于4

int a=10;
int *p=&a;
int &b=a;
sizeof(p)=4;
sizeof(b)==sizeof(a)=4

6.
指针作为函数形参时,传的是地址
引用作为函数形参时,传的是实参本身

void Swap1(int *a, int *b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

void Swap2(int &a, int &b)
{
    int tmp = a;
    a = b;
    b = tmp;
}

void main()
{
    int a = 10;
    int b = 20;
    Swap1(&a, &b);
    Swap2(a, b);
}

反汇编

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

汇编下,表达相同。

7.
有const 指针
没有const 引用

const int *p
int *const p
const int * const p

8.
指针++ 加到是所指向的对象的字节数
引用++含义不同

void main()
{
    int a=10;
    int &b=a;
    b++;//==a++,相当于a本身自加
    int *p=&a;
    p++;//+(sizeof(*p))相当于+(sizeof(int))
}
版权声明:本文为Z_J_T原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Z_J_T/article/details/78685584

智能推荐

【c++】模板和模板类

C++是一种“强类型”语言。也就是说,对于一个变量,编译器必须确切知道它是什么类型。但是,这种强类型函数在实现一些简单函数反而更麻烦。例如:求两大数的较大者,应以Max( )函数,我们需要对不同数据类型分别定义不同重载版本来实现: 我们看到,虽然我们可以通过函数重载去实现,但明显存在一些缺点: 1、所有的函数除返回类型外,函数体都相同,代码复用率低; 2、只要新类型出现,我...

[java][事务]tcc事务实战学习过程

学习项目:https://github.com/14251104246/spring-cloud-rest-tcc 下载源码,进入源码目录运行:mvn clean package Docker Compose运行 docker-compose -f infrastructure-compose.yml up -d docker-compose -f basic-ms-compose.yml up ...

[学习记录,]Mybatis入门

环境: Eclipse 2019 Tomcat 9.0 jdk1.8 开搞 首先创建工程 结构如下 导入Jar包 可在mybatis官网下载 http://www.mybatis.cn/82.html 配置文件mybatis-config.xml 事务管理有两种:JDBC和MANAGED JDBC: MANAGED 数据源类型:UNPOOLED、POOLED、JNDI 创建实体类文件User.ja...

运用for语句来判断数组中值得大小

总结: 1将if语句与数组联合起来判断输入中各组中的最大最小值; 2注意:定义的数组数量是躲多少就要输入多少组数据,少输入就无法输出;...

Bridging signals

Bridging signals Time Limit: 1000MSMemory Limit: 10000K Total Submissions: 10926Accepted: 5982 Description 'Oh no, they've done it again', cries the chief designer at the Waferland chip factory. Once ...

猜你喜欢

一天一大 leet

一天一大 leet 题目(难度:困难): 示例 抛砖引玉 官方答案 高手在民间 菜鸡的自白 20200606 题目(难度:困难): 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 示例 示例 抛砖引玉 要求算法的时间复杂度为 O(n),即限制了只能循环一次; 先对数组排序 循环数组记录后一个元素等于前一个元素+1或者等于前一个元素的数量 满足条件++,不然重...

Tensorflow实现的CNN文本分类

https://blog.csdn.net/somtian/article/details/69359498 原博文, github 在这篇文章中,我们将实现一个类似于Kim Yoon的卷积神经网络语句分类的模型。 本文提出的模型在一系列文本分类任务(如情感分析)中实现了良好的分类性能,并已成为新的文本分类架构的标准基准。 本文假设你已经熟悉了应用于NLP的卷积神经网络的基础知识。 如果没有,建议...

JDBC新手入门教程

开发工具:idea 数据库:mysql jar包:junit-4.10 mysql-connector-java-8.0.18 junit-4.10下载 mysql-connector-java-8.0.18下载 注意1:jdbc的驱动因为使用的是mysql-connector-java-8.0.18,所以为(“com.mysql.cj.jdbc.Driver”),而不是(...

Lua 排序 table.sort

    正如C#中有Array.Sort(),lua中也有自己的排序方法即table.sort(table,function)。     lua中的排序默认是从大到小的排序;     传入一个方法参数,可以使排序从小到大; 打印结果:  ...

SURF算法简述及Python标记SURF特征检测实践

目录 一、SURF算法 1.算法简介 2.SURF与SIFT的具体差异 二、Python代码实践 1.测试环境 2.测试代码 3.核心函数 4.测试结果 一、SURF算法 1.算法简介 SURF(Speeded-Up Robust Features)加速稳健特征,是一种稳健的局部特征点检测和描述算法。 SURF是对SIFT算法的改进,该算子在保持 SIFT 算子优良性能特点的基础上,同时解决了 S...