当前位置: 首页 > news >正文

C/C++面试常见问题——指针和引用的区别

首先想要理解指针和引用的区别,我们要明确什么是指针,什么是引用

一,指针和引用的基本概念及特性

指针是一个特殊变量,其中存储着所指向变量的地址

指针主要有以下特性:

1. 在使用时需要*解引用

2. sizeof(指针)的大小是固定的,32位系统下是4字节,64位系统下是8字节

3. 指针+1,指的是指针向后偏移,偏移量为指向变量的类型的大小

引用不是新定义一个变量,而是给变量起别名,引用和被引用变量共用一处空间,不会额外开辟空间

引用特性如下:

1. 引用在定义时必须初始化

2. 一个变量可以有多个引用,就如同一个人可以有多个别名

3. 引用定义后,就无法在引用其他变量

4. 常引用,常引用指的就是在引用常变量时需要用const修饰,这是因为权限只能缩小不能放大,被引用变量都无法修改值,那么引用自然也不能修改

int main()
{//引用int a = 10;int& b=a;//常引用const int c = 10;const int& d = c;return 0;
}

而常引用这里需要注意的一点时不同类型的常引用

 如上面情况,为什么int类型无法引用double类型变量,这是因为当用int类型引用double类型变量时,会有一个隐式类型转换,编译器会重新开辟一个临时空间用于存放double的整形数据,而临时变量具有常性,因此不同类型引用需要用const修饰

二,引用和指针的区别

在搞明白引用和指针各自的概念和特性之后,区别就显而易见了

引用和指针的区别如下:

1. 引用是取别名,和被引用对象共用一块空间。而指针则是一个特殊变量,存储指向变量的地址

2. 引用在定义时必须初始化,而指针则没有要求,因此指针有NULL,引用则没有

3. 指针sizeof计算的大小是固定的(32位4字节,64位8字节),而引用sizeof计算的大小则是被应用变量的大小

4.引用在使用时按照正常变量使用即可,而指针还需要*解引用访问目标值

5.引用在定义初始化后,就无法引用其他值;指针则可以改变指向的地址

6.引用+1,就是引用的实体值+1;指针+1则是,指针偏移一个指向类型数据大小的偏移量

7.指针有多级指针,用起来比较复杂;而引用,没有多级引用,因此在C++中使用引用更加安全

但是这里需要注意一个大前提,在语法上讲,引用是别名,没有自己的空间,而在底层上,引用是有自己的空间的,而且其调用方式和指针是一样的,因此引用也可以看做是对指针的一层封装,让我们使用时更加简单安全。

以上内容如有错误,希望大佬多多指点,感谢感谢

相关文章:

C/C++面试常见问题——指针和引用的区别

首先想要理解指针和引用的区别,我们要明确什么是指针,什么是引用 一,指针和引用的基本概念及特性 指针是一个特殊变量,其中存储着所指向变量的地址 指针主要有以下特性: 1. 在使用时需要*解引用 2. sizeof(指针)的…...

探索DeFi世界,MixGPT引领智能金融新时代

随着区块链技术的迅猛发展,DeFi(去中心化金融)正成为金融领域的新宠。在这个充满活力的领域里,MixTrust站在创新的前沿,推出了一款引领智能金融新时代的核心技术——MixGPT。 MixGPT:引领智能金融体验的大型…...

留学教育咨询机构如何通过软文强势突围

近年来留学市场逐渐回暖,但是行业竞争也更加激烈,留学教育咨询机构想要在激烈的市场竞争中强势突围,除了优秀的职业素养,专业的服务态度外,还需要具备品牌形象打造和推广的能力,也有不少留学机构找盒子进行…...

苹果平板可以用别的电容笔吗?电容笔和Apple pencil区别

和苹果原装的Pencil相比,这种平替的电容笔并没具备重力压感,只有一种倾斜的压感功能。如果你不经常用来作画,一支普通的电容笔就足够了。不管是用来记笔记,还是用来解决一些数学问题,都能用得上。再说了,即…...

【Matlab笔记_16】yyyy-MM-dd HH:mm:ss的datetime格式拆分为yyyy-MM-dd日期部分和HH:mm:ss时间部分

实例:需要拆分的时间为’2002-04-17 11:00:00’ 1拆分出 ‘2002-04-17’ % 假设datetime对象是 dt,例如: dt datetime(2002-04-17 11:00:00);% 使用dateshift提取日期部分 dateOnly dateshift(dt, start, day);% 显示提取的日期部分 disp…...

Android12之DRM架构(一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...

檀香香料经营商城小程序的作用是什么

檀香香料有安神、驱蚊、清香等作用,办公室或家庭打坐等场景,都有较高的使用频率,不同香料也有不同效果,高品质香料檀香也一直受不少消费者欢迎。 线下流量匮乏,又难以实现全消费路径完善,线上是商家增长必…...

RPA在票据处理中的应用

随着大中型企业的数字化转型进程加速,企业财务方面每天都存在大量票据需要处理,包括发票、收据、报销单等。传统的票据处理流程通常繁琐、耗时且容易出错,重复且枯燥的工作消耗了财务人员宝贵的时间和精力,也增加了企业的人力成本…...

Jmeter接口测试 —— jmeter对图片验证码的处理

jmeter对图片验证码的处理 在web端的登录接口经常会有图片验证码的输入,而且每次登录时图片验证码都是随机的;当通过jmeter做接口登录的时候要对图片验证码进行识别出图片中的字段,然后再登录接口中使用; 通过jmeter对图片验证码…...

minikube创建一个pod并暴露端口(使用docker驱动安装)

因为minikube使用service暴露端口是使用nodeIP:nodePort 而不是 localhost:nodePort 公开访问。我们只能使用kubectl的端口转发功能或者使用iptables的转发功能来实现外网服务暴露。 我这里使用shiro来举例 apiVersion: apps/v1 kind: Deployment metadata:name: shiro550 spe…...

2023国考证件照要求什么底色?证件照换背景底色的方法

2023年国家公务员考试报名已经开始了,我们在考试平台提交报名信息的时候,有一项就是需要上传证件照片,对于证件照片也会有具体的要求,比如背景底色、尺寸大小、dpi和kb大小。今天就为大家详细介绍一下关于国考证件照背景色的内容&…...

【SA8295P 源码分析 (一)】87 - SA8295P HQNX + Android 编译环境搭建指导

【SA8295P 源码分析 一】87 - SA8295P HQNX + Android 编译环境搭建指导 一、Android 编译环境搭建:Android + sa8295p-hqx-4-2-4-0_hlos_dev_la.tar.gz1.1 更新 Ubuntu 18.04 源路径1.2 安装基础编译环境1.3 设置JDK8 的环境变量1.4 配置sh为bash(默认为dash)1.5 Android 编…...

网络基本结构及数据传输方式

nternet 网络基本结构及数据传输方式根据传统的网络结构,用户的访问流程基本如下: 用户在自己的浏览器中输入要访问的网站的域名 浏览器向本地DNS请求对该域名的解析 本地DNS将请求发到网站授权的DNS服务器。 授权DNS将服务器的IP地址作为解析结果送给本…...

从实体经济和数字经济融合展开,思考商业模式的变化

对于《关于构建数据基础制度更好发挥数据要素作用的意见》想必大家已经不陌生了,之前的文章中也围绕数据要素说了很多东西,数据、数字化、数字经济之类的已经称得上是绝大部分人对未来发展方向的共识,不过今天想从这个《意见》出发&#xff0…...

Python 框架学习 Django篇 (四) 数据库增删改查(CURD)

在上一章结尾我们了解到如采用前后端开发分离的架构模式开发,后端几乎不负责任何展现界面的工作,只负责对数据进行管理 ,对数据的管理主要体现在: (增加、修改、删除、列出 )具体的接口参考大佬的文档BYSM…...

关于错误码

初学编程,在C语言中定义错误码,是使用宏: #define SUCCESS 0 //成功 #define FAILED 1 //失败 后来知道,用枚举更适合,因为宏的名声实在不好,而枚举可以帮你自动编号,减少…...

Linux | gcc/g++的使用

目录 前言 一、程序的翻译过程 1、预编译 2、编译 3、汇编 4、链接 (1)链接做了什么 (2)动态链接 (3)静态链接 (4)如何使用gcc进行动态链接和静态链接 前言 本章主要带着大…...

了解容器运行时安全:保护你的容器应用

前言 容器是一种虚拟化技术,用于封装和运行应用程序及其依赖项,以便在不同的计算环境中保持一致性和可移植性。自2013年容器诞生至今,容器Docker镜像的下载量超20亿,虽然容器行业发展如火如荼,但是其安全风险却不容乐…...

大规模语言LLaVA:多模态GPT-4智能助手,融合语言与视觉,满足用户复杂需求

大规模语言LLaVA:多模态GPT-4智能助手,融合语言与视觉,满足用户复杂需求 一个面向多模式GPT-4级别能力构建的助手。它结合了自然语言处理和计算机视觉,为用户提供了强大的多模式交互和理解。LLaVA旨在更深入地理解和处理语言和视…...

Element UI定义方法校验邮箱格式

1. .vue中定义了3个邮箱输入框&#xff0c;前面两个是输入多个邮件地址&#xff0c;最后一个是使用element自带的校验来校验单个邮件地址 <el-row><el-col :span"24"><el-form-item label"收件人" prop"to"><el-input v-mo…...

DigiCert代码签名证书

在当今的数字化时代&#xff0c;确保软件的完整性和来源的可靠性至关重要。DigiCert代码签名证书是一种专业而受信任的数字签名解决方案&#xff0c;帮助开发者保护其软件免受篡改和恶意行为的侵害。本文将介绍DigiCert代码签名证书的特点和优势&#xff0c;并讨论为何选择Digi…...

HTML5+CSS3小实例:网页底部间隔波浪动画特效

实例:网页底部间隔波浪动画特效 技术栈:HTML+CSS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content…...

前端 js 之 代码执行的一个过程 02

嘿&#xff0c;欢迎你来 &#xff01;&#x1f495; 文章目录 前言一、运行一个 js 文件二、运行环境三、js执行代码的过程&#xff08;普通变量&#xff09;四、打印 window五、js执行代码的过程&#xff08;函数变量&#xff09;六、函数调用函数的过程注意&#xff01;&…...

【经验分享】如何构建openGauss开发编译提交一体化环境

前文 本文适合对openGauss源代码有好奇心的爱好者&#xff0c;那么一个友好的openGauss源代码环境应该是怎么样的。openGauss的开发环境是如何设置的&#xff1f;openGauss的编译环境是如何构建的&#xff1f;如何向openGauss提交代码&#xff0c;笔者集合官方和几位博主实践提…...

儿童疫苗接种:安全与注意事项

引言&#xff1a; 儿童的疫苗接种是维护其健康和预防传染病的重要措施。疫苗可以有效地保护儿童免受各种疾病的威胁&#xff0c;但在接种过程中需要家长和监护人特别关注一些注意事项&#xff0c;以确保接种的安全性和有效性。本文将深入探讨儿童疫苗接种的重要性&#xff0c;…...

Go 代码块与作用域,变量遮蔽问题详解

Go 代码块与作用域详解 文章目录 Go 代码块与作用域详解一、引入二、代码块 (Block)2.1 代码块介绍2.2 显式代码块2.3 隐式代码块2.4 空代码块2.5 支持嵌套代码块 三、作用域 (Scope)3.1 作用域介绍3.2 作用域划定原则3.3 标识符的作用域范围3.3.1 预定义标识符作用域3.3.2 包代…...

可观测性-Metrics-WebClient异步Http远程Call

代码示例 1.依赖导入 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><ar…...

Android之播放本地视频和Url视频方法

一、播放本地视频文件 根据文件路径在浏览器中播放&#xff0c;可用于视频预览等场景 效果&#xff1a; 用浏览器播放本地视频 文件路径例子&#xff1a; /storage/emulated/0/Android/data/com.custom.jfrb/files/Movies/1697687179497.mp4 File file new File("文件…...

设计模式:工厂方法模式(C#、JAVA、JavaScript、C++、Python、Go、PHP):

本节主要介绍设计模式中的工厂方法模式。 简介&#xff1a; 工厂方法模式&#xff0c;它是对简单工厂模式的进一步抽象化&#xff0c;其好处是可以使系统在不修改原来代码的情况下引进新的产品&#xff0c;即满足开闭原则。 它定义了一个用于创建对象的工厂接口&#xff0c;让…...

C++基础——指针

1 概述 指针的作用&#xff1a;可以通过指针间接访问内存 内存编号从0开始&#xff0c;一般使用十六进制数字表示&#xff0c;指针可以保存地址 2 指针变量定义和作用 int main() {//1、指针的定义int a 10; //定义整型变量a//指针定义语法&#xff1a; 数据类型 * 变量名 …...