C++中指针与引用区别

关于二叉树的线索化以及C语言函数调用问题 最近在看数据结构,写到线索二叉树的时候才明白为什么C++中要有引用传值了,真的很方便好吗… 以上纯属瞎扯,那么下面进入正题 一:关于C++中的值传递,指针传递以及引用传递详解 首先参考的书籍上提到了引用(&)的概念,而我所使用的c语言并不支持引用类型,所以只好用指针代替,但是两者有一些细微的差别如下: 从概念上讲,指针的本质就是存放变量地址的一个变量,在逻辑上是独立的,他可以被改变,包括其... 阅读详情

相同点

1.都是地址的概念

指针指向一块内存,它的值为该块内存的地址。引用是某块内存的别名。

区别

1.指针是实体,引用只是一个别名。

2.使用时,引用需要解引用,指针不需要。(解引用指获得该内存地址处保存的值)

3.引用从一而终,指针可多变。给引用赋值修改的是该引用所关联的对象的值,而并不是使引用与另一个对象关联。引用一经引用,就始终指向同一个特定对象。

demo1

int ival = 1024,ival2 = 2048;
int *pi = &ival,*pi2 = &ival2;
pi = pi2;//<span style="color:#FF0000;">pi now points to ival2</span>

demo2

int &ri = ival,&ri2 = ival2;
ri = ri2; //<span style="color:#FF0000;">assigns ival2 to ival</span>

4.指针可为空,引用不可为空。引用总是指向某个对象(定义引用时没有初始化是错误的)

二者连用(*&)

称作指针的引用。函数的形参和调用的实参就产生了关联,所有对形参的操作也会影响实参。

实例如下(二叉排序树的建立、遍历)

#include <iostream>
using namespace std;

typedef struct BTNode
{
	int key;
	struct BTNode *lchild;
	struct BTNode *rchild;
}BTNode;

void createBST(BTNode *&bt,int key[],int n);//创建平衡二叉树
int BSTInsert(BTNode *&bt,int key);//插入节点
void preOrder(BTNode *bt);//先序遍历

void main()
{
	int key[] = {5,4,3,8,7,9,10};
	int n = sizeof(key)/sizeof(key[0]);
	BTNode *bt;
	bt = (BTNode*)malloc(sizeof(BTNode));
	bt->lchild = bt->rchild = NULL;
	createBST(bt,key,n);
	preOrder(bt);
}

void createBST(BTNode *&bt,int key[],int n)
{
	int i;
	bt = NULL;
	for(i=0;i<n;i++)
		BSTInsert(bt,key[i]);
}

int BSTInsert(BTNode *&bt,int key)
{
	if(bt==NULL)
	{
		bt = (BTNode*)malloc(sizeof(BTNode));
		bt->lchild = bt->rchild = NULL;
		bt->key = key;
		return 1;
	}
	else
	{
		if(key==bt->key)
			return 0;
		else if(key<bt->key)
			return BSTInsert(bt->lchild,key);
		else
			return BSTInsert(bt->rchild,key);
	}
}

void preOrder(BTNode *bt)
{
	if(bt!=NULL)
	{
		cout<<bt->key<<" ";
		preOrder(bt->lchild);
		preOrder(bt->rchild);
	}
}
上面实例中的方法void createBST(BTNode *&bt,int key[],int n)和int BSTInsert(BTNode *&bt,int key)。要用*&而不能只用*,因为此处均为初始化实参BTNode *bt,形参若用指针,则在for循环中每次均对新的指针变量进行初始化,创建二叉树这种类型的结构赋值时方法中的形参都应是*&型(个人理解)。




[C++指针和引用 cpp] -> [C++中指针和引用的区别及使用场景详解] 在C++语言中,指针和引用是两个重要的概念,虽然它们都可以用来进行变量的传递和操作,但是在使用上还是有很多的差别。引用是一个已经存在的变量的别名,通过引用可以直接访问该变量,并且使用起来比指针更加方便。类成员的访问:指针和引用都可以用于访问类成员,不过在实际开发中,建议使用引用来访问类成员,因为引用更加直观。总之,指针和引用都是C++中非常重要的概念,掌握它们的区别和使用场景对于C++开发人员来说是非常必要的。定义形式不同:指针使用“*”符号来定义和操作,而引用使用“&”符号来定义和操作。 阅读详情

相关推荐

二、租用AutoDL服务器与连接教程

点击右上角控制台,选择【租用新的实例】;,我这里使用的是xshell和xftp工具(自行下载)。打开本地目录和服务器目录,直接拖动文件。

zzf021122的博客 1326

c++中引用及指针详解

这里写目录标题1、指针1.1、什么是指针指针的本质指针与地址程序中如何声明指针以及如何使用运算符&和*1.2、指针有什么作用指针与函数参数指针与数组字符指针与函数2、引用2.1、什么是引用2.2、引用用什么作用2.3、引用的作用3、const3.1指针与const3.2、引用与const 1、指针 1.1、什么是指针 指针的本质 通俗来说 指针是一个变量 (保存变量地址的变量)像常见的: int a=10; 指针与地址 首先 ,我们通过一个简单 的示意图来说明内存是如何组织的。通常机器都有一系列连

weixin_48560325的博客 9796

WIFI中CSI的读取

学习目标: 目前正在做基于WIFI的无设备定位,准备使用信道状态信息(CSI),学习一下。 目前采集数据环境已经搭建好,准备研究信号的预处理。 学习内容: 1、 信号的读取——read_bf_file函数的研究 2、 3、 4、 1. read_bf_file详解: %READ_BF_FILE Reads in a file of beamforming feedback logs. % This version uses the *C* version of read_bfee, ...

sz3076799的博客 8892

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

1、两者定义和性质不同 指针是一个变量,存储的是一个地址,指向内存的一个内存单元 引用是源变量的一个别名,跟原来的变量实质上是同一个东西 int a = 123; int *p = &a; // p是指针, &在此是求地址运算 int &r = a; // r是引用, &在此起标识作用 2、指针可以有多级,引用只能是一级 int **p; // 指针的指针,p是存储指针的地址 int &&r; // 不合法 3、指针可以在定义的时候不初始化,引用必须在

qq_16539009的博客 4321

Protege新手必看:从安装到建模的完整指南(附推理功能详解)

本文为Protege新手提供从安装、配置到核心建模的完整实战指南。详细讲解了Java环境准备、本体项目创建、类与属性定义、个体填充等关键步骤,并重点解析了推理功能的配置与使用,帮助读者快速构建可逻辑推理的知识图谱,避开常见陷阱。

numpy6sculptor的博客 796

单片机通识之UART通信协议(如何用汇编实现)

使用汇编实现UART通信

smart_num_1的博客 996

c++:指针和引用的区别

有时候在C++工程中可能需要将某些函数按照C的风格来编译,在函数前加extern "C",意思是告诉编译器, 将该函数按照C语言规则来编译。比如:tcmalloc是google用C++实现的一个项目,他提供tcmallc()和tcfree 两个接口来使用,但如果是C项目就没办法使用,那么他就使用extern “C”来解决。 ...

须知少日拏云志,曾许人间第一流。 1万+

2026年中科曙光嵌入式软件岗位面试题库(附参考答案)

嵌入式系统与C/C++基础摘要 硬件与外设总线 SPI总线:高速全双工同步串行接口,采用SCLK、MOSI、MISO和CS信号线,支持一主多从架构,典型应用于Flash存储、传感器等高速外设。 I2C总线:两线制低速串行总线(SDA/SCL),支持多主多从,需注意地址冲突和信号完整性。 时序约束:包括建立时间、保持时间、时钟周期等,是保障电路稳定运行的关键。 AD转换:将模拟信号转换为数字信号,应用于传感器采集、音频处理等场景。 PC寄存器:存储下一条指令地址,控制程序执行流,在跳转和中断时自动更新。 C/

Open 69

C++ 指针和引用引用详解

C++ 指针和引用引用详解

qq_35320456的博客 2963

Android 系统状态栏中实现高斯模糊背景

至此,我们已经完成了在 Android 系统的 SystemUI 中实现高斯模糊背景的过程。通过以上的布局和代码修改,我们可以在状态栏中看到具有高斯模糊效果的背景。同时,为了在不同版本的 Android 系统上适配高斯模糊效果,可能需要进行一些额外的代码调整和兼容性处理。希望本文能够帮助你理解如何在 Android 系统的 SystemUI 中实现高斯模糊背景,并通过提供的源代码进行相应的开发和调试。首先,我们需要在 SystemUI 的布局文件中添加一个用于展示高斯模糊背景的视图。属性来开启模糊效果。

CyberSparkZ的博客 869

【Matlab】飞行器气动弹性仿真与分析

气动弹性是飞行器设计领域的核心交叉学科,融合了空气动力学、结构动力学和控制理论,主要研究飞行器结构在气动力作用下的弹性变形、振动响应及相互耦合规律,直接影响飞行器的飞行稳定性、操纵性和结构安全性。随着飞行器向高速度、高机动性、轻量化方向发展,气动弹性问题愈发突出,如颤振、发散、嗡鸣等现象,严重时会导致飞行器结构破坏甚至飞行事故,因此气动弹性仿真与分析已成为飞行器设计、验证和优化的关键环节。当前,飞行器气动弹性仿真面临诸多技术挑战:气动力与结构变形的强耦合特性难以精准描述,易出现仿真误差;

unber的博客 233

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

C++中指针和引用区别---详解版 下面用通俗易懂的话来概述一下: 指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const、volatile等等。见下图,所示指针的含义: 引用-引用是一个对象的别名,主要用于函数参数和返回值类型,符号X&表示X类型的引用。见下图,所示引用的含义: 2、指针和引用的区别 首先,引用不可以为空,但指针可以为空。前面也说过了引用是对象的别名,引用为空——对象都不存在,怎么可能

m0_60259116的博客 3550

4.2 多智能体系统的严格隔离机制:防止上下文污染与隐私数据脱敏实战

本文探讨了多智能体系统中上下文信息共享带来的安全风险与解决方案。研究发现,随着Agent数量增加,上下文信息泄露概率呈指数级上升,可能导致跨Agent错误传播、隐私泄露等问题。文章提出分层隔离架构,将上下文划分为全局共享和本地私有两部分,并通过命名空间隔离、递归压缩和隐私过滤技术确保数据安全。技术实现上,建议为每个子Agent创建独立状态空间,采用原子化更新和读写锁控制避免状态竞争。隐私保护方面,结合正则匹配和命名实体识别技术进行敏感数据过滤,确保符合GDPR等法规要求。这些措施共同构建了可靠、安全且合规的

公众号:AI前沿侦探 225

C++中指针和引用的区别(超详细)

指针和引用主要有以下区别: 引用必须被初始化,但是不分配存储空间。指针不声明时初始化,在初始化的时候需要分配存储空间。 引用初始化后不能被改变,指针可以改变所指的对象。 不存在指向空值的引用,但是存在指向空值的指针。 注意:引用作为函数参数时,会引发一定的问题,因为让引用作参数,目的就是想改变这个引用所指向地址的内容,而函数调用时传入的是实参,看不出函数的参数是正常变量,还是引

程伟康的博客 7万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

指针与引用看上去完全不同(指针用操作符“*”和“->”,引用使用操作符“. ”),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先,要认识到在任何情况下都不能使用指向空值的引用。一个引用必须总是指向...

chengyunpeng0198的博客 94

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C++中指针和引用区别

一、概念 指针 对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const、volatile等等。 见下图,所示指针的含义: 引用 引用是一个对象的别名,主要用于函数参数和返回值类型,符号T&表示T类型的引用。 见下图,所示引用的含义: 二、指针和引用的区别 是否需初始化 首先,引用不可以为空,但指针可以为空。 ...

hyl1181的博客 425

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 阿里2016笔试题
下一篇: a++与++a区别
hellorichen
博客等级 码龄13年 199粉丝 104原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值