c++按值传递、引用传递及指针传递的理解

C++函数参数中&和*的意义 写这篇博文的动机是,在看Linux网络编程时,看到 //bind 函数定义 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); //函数调用 bind(lfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)); 觉得在函数参数中一会用 *,一会... 阅读详情

举个栗子,分析一下C++按值传递、引用传递和指针传递的区别:

#include "transmit.h"
#include <iostream>

using namespace std;

//按值传参
void changeValue(int x)
{
	x = x + 5;
	cout << "地址是:" << &x;
	cout << " 值是:" << x << endl;
}

//按引用
void changeValueq(int &x)
{
	x = x + 8;
	cout << "地址是:" << &x;
	cout << " 值是:" << x << endl;
}

//按指针
void changeValuep(int *x)
{
	*x = *x + 10;
	cout << "地址是:" << x;
	cout << " 值是:" << *x << endl;
}

int main()
{
	int x = 10;
	cout << "原地址是:" << &x << endl;

	cout << "按值传递:";
	changeValue(x);
	
	cout << "按引用传递:";
	changeValueq(x);

	cout << "按指针传递:";
	changeValuep(&x);


	return 0;
}

输出以下结果:

结论:

由结果看到,按值传递时,x的地址发生了变化。但是按指针和引用传递地址都没有变化。

a、当函数内部需要修改变量的值,又不希望修改后影响变量值时,采用值传递。

b、引用是变量的别名,对引用的操作就是对变量的操作。所以改变了引用的值,变量x的值也会改变。

c、指针存放的是变量的地址,对指针操作,就相当于对变量进行操作。

所以按引用传递和按指针传递都能改变变量的值。

GD32F103实战:用ADC+DMA实现高精度多通道电压采集与OLED实时显示(附完整工程) 本文详细介绍了如何利用GD32F103的ADC+DMA技术实现高精度多通道电压采集,并通过OLED实时显示数据。文章包含硬件架构设计、ADC配置技巧、DMA传输优化及显示系统实现方案,提供完整工程代码和调试指南,适用于工业传感器和环境监测设备开发。 阅读详情

相关推荐

美团外卖 mtgsig 1.2 逆向工程与补环境实战指南

本文深入解析了美团外卖核心风控参数mtgsig 1.2的生成机制与逆向实战。通过拆解其复杂的JSON结构,揭示了设备指纹、环境信息加密等关键字段。重点阐述了在Node.js中模拟浏览器环境(补环境)的核心方法,包括DOM/BOM对象、本地存储及Canvas/WebGL等高级指纹的模拟技巧,为安全研究和合规自动化测试提供了一套完整的技术指南。

uber9的博客 409

C++中的值传递、指针传递和引用传递

在函数调用的过程中,形参的值发生了交换,结束后实参的值被修改。在swap函数被调用后,为形参分配了各自的空间,并且把main函数中a,b的值复制一份分别复制给形参,在swap函数中进行两值的交换并不会影响到main函数中变量的值。在C++中用三种给函数传递参数的方式,分别是:值传递、指针传递、引用传递。这就是一个最基本的指针引用,将指针作为函数的参数可以让函数对指针指向的变量的值进行操作。具体指针的知识在此不做过多的赘述。从上面代码可知,a,b变量的值经过swap函数的操作发生了值的交换。

higherman_的博客 581

Aloudata Agent :基于 NoETL 明细语义层的分析决策智能体

这是包括我们在内的一些厂商探索的一个新方向,这种方式先由大模型将自然语言转化为对指标语义层的查询请求(MQL,Metrics Query Language),再由指标平台将指标和维度的查询与计算逻辑转化为准确的 SQL 查询语句。用户查询经大模型语义解析后,将其转换为指标、维度及筛选条件的组合表达,并生成面向指标平台的 MQL,Aloudata CAN 指标平台的语义引擎将 MQL 转换为准确和可执行的查询 SQL,语义引擎内置函数体系与 SQL 解析器,确保语义转换的 100% 准确性。

Aloudata的博客 1663

C++的引用传递

数据类型 &别名=原名int main()int a = 20;int& b = a;

2301_80872441的博客 3993

BarTender破解版风险与低成本正版替代方案全解析

在工业自动化和企业信息化领域,标签打印与条形码技术是连接物理世界与数字系统的关键环节。其核心原理是通过软件驱动打印设备,将可变数据(如序列号、生产日期)与固定模板结合,生成可追溯的标识载体。这项技术的价值在于实现生产流程可视化、供应链管理精细化与质量控制自动化,广泛应用于仓储物流、制造执行、零售门店等场景。然而,软件授权合规性常成为企业成本控制的痛点,尤其面对BarTender这类行业标准工具时,部分用户可能寻求破解方案。但破解版软件通常采用内存补丁、伪造许可证等技术手段绕过验证,不仅存在法律风险,更会引发

weixin_32736961的博客 728

如何在项目中集成bpmn-process-designer

文章目录一、bpmn-process-designer是什么?二、使用步骤1.将下面地址的代码下载到本地2.替换dependencies和devDependencies3.拷贝package目录4.在main.js引入代码5.拷贝src5.拷贝App.vue代码注意事项 一、bpmn-process-designer是什么? bpmn-process-designer是一个基于 bpmn.js,Vue 2.x 和 ElementUI 开发的流程设计器(前端部分),支持监听器,扩展属性,表单等配置,可自由扩展

weixin_43550766的博客 9453

C++ 引用传递 超级详细 小白也行

这时 Int& 的属性是可以用可以改的,而10不能改,见过 10 = a 吗?引用的&放在类型名(int)后面,而取地址的&是放在变量前面(例如图中的&a)。引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它 引用的变量共用同一块。2. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型 实体。5. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小。,俩边都是Int 只能用不能改类型,所以可以执行成功。

rwh04160416的博客 4482

麒麟系统下PaddleOCR的离线部署实战:从环境搭建到模型优化

本文详细介绍了在国产麒麟操作系统上离线部署百度PaddleOCR的完整实战流程。从系统环境准备、Conda虚拟环境搭建,到PaddlePaddle框架和PaddleOCR的离线安装,再到预训练模型的本地部署与优化技巧,提供了全面的文字识别解决方案。重点解决了离线环境下依赖包管理、模型量化加速等核心问题,并附带了批量处理与内存监控的进阶代码,适用于对数据安全有严格要求的政务、金融等场景。

docker7nomad的博客 963

深入理解C++——引用传递

引用传递,是C++非常重要的特性。引用传递能够将变量或对象本身作为参数传递,而不是复制一份副本后,传递副本。 引用传递的主要作用有二: 第一,函数内部可修改变量或对象。函数返回后,函数调用者得到的也是被修改后的值。常见场景:① 函数需要返回多个值,由于return只能返回一个值,因此可以将其他值以引用传递的形式修改。② 控制递归过程,可以令参数为引用传递,每次递归执行函数体,就会修改参数,当参数等...

qq_34719392的博客 7130

思必驰离线语音芯片:智能家居控制的核心引擎

思必驰离线语音芯片TH1520通过本地化语音识别技术,为智能家居带来革命性体验。该芯片具备200-600毫秒的快速响应、75分贝抗噪能力和双核异构设计,显著提升设备交互效率。支持自定义指令和10种音色选择,开发周期缩短至3天,BOM成本降低30%,是智能家居控制的核心引擎。

redis7keeper的博客 985

Xilinx ERNIC RoCEv2 FPGA实现与QP队列深度解析

本文深入解析Xilinx ERNIC RoCEv2在FPGA上的实现,重点剖析QP队列对的管理机制与深度优化策略。通过Verilog代码示例和工程实战,详细介绍了如何实现高吞吐量、低延迟的RDMA硬件卸载方案,为金融交易和数据中心应用提供性能优化指导。

solidity8miner的博客 876

C++ 值传递、引用传递、指针传递

一、简介 参数传递的三种方式:值传递、引用传递、指针传递

weixin_39354845的博客 2797

手眼标定(EyeToHand)推导

Base为基坐标系(B),工具末端坐标系(T),标定板为Mark坐标系(M),相机坐标系(C)对于每两个姿态都存在上式,组成一个AX=XB的矩阵方程,X为。此时转换成AX=0的问题,单纯用SVD求奇异解便可得到。相机坐标系到Base基坐标系下的转换关系。已知标定板与机械臂末端的相对位置固定不变,,即。带入(2)式求,至此求解出需要的手眼矩阵。在眼在手外的时候,其实是要求解。

stevenreally6的博客 1143

【C++】谈谈对值传递、指针传递、引用传递的理解

值传递:需要建立一个副本,当对象“很大”时,去拷贝构造一个该对象的副本开销较大,对副本对象的操作并不会影响“原本”对象。地址传递:也需要建立一个副本,但是这个副本是一个只占4个字节的指针变量,相比值传递开销明显减少。并且由于副本和原本保存的都是同一个对象的地址,二者指向的是同一个对象。引用传递:引用ref实质上是一个指针常量,不过编译器可以自动识别引用类型,使用引用时编译器自动把这个指针常量所指的对象返回给我们。因此通过引用进行传递,传递的就是这个对象本身。

Cxj__的博客 1805

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java传递指针_java及C++中传值传递、引用传递和指针方式的理解

java的值传递理解:代码1:public class Test {/*** @param args*/public static void main(String[] args) {StringBuffer buffer= new StringBuffer("colin");SChange(buffer);System.out.println( buffer);}public static vo...

weixin_39580748的博客 470

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++ 值传递、指针传递与引用传递的理解

C++ 值传递 指针传递 引用传递 简单定义及区别 我们首先给出各种传递方式的简单定义,及各自的区别。 值传递 在值传递中,形参是实参的拷贝,改变形参的值并不影响外部实参的值。值传递是单向的,及参数的值只能传入,不能传出。 指针传递 本质上是值传递的方式,其所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理。当大于形参的指向操作时,相当于对实参本身进行操作。 引用传递...

优快云 559

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C++ 值传递、指针传递、引用传递 理解

C++ 值传递、指针传递、引用传递详解 最近写了几篇深层次讨论数组和指针的文章,其中提到了“C语言中,所有非数组的形式参数传递均以值传递形式” 数组和指针背后——内存角度 语义"陷阱"---数组和指针 而关于值传递,指针传递,引用传递这几个方面还会存在误区, 所有我觉的有必要在这里也说明一下~ 下文会通过例子详细说明哦 值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值。...

qq_43080331的博客 156

c++关于值传递,引用传递和指针传递以及深拷贝和浅拷贝的理解

c++ 传参类型和拷贝类型

皮爱基的博客 2817

【理解C++】C++值传递、引用传递、指针传递

C++值传递、引用传递、指针传递 C++ 值传递、引用传递、指针传递详解

m0_51139226的博客 123

C++函数参数和返回值三种传递方式:值传递、指针传递和引用传递(着重理解)

C++函数参数和返回值三种传递方式:值传递、指针传递和引用传递(着重理解) 引用与指针的比较 引用是 C++中的概念,初学者容易把引用和指针混淆一起。一下程序中,n 是m 的 一个引用(reference),m 是被引用物(referent)。 int m; int &n = m; n 相当于m 的别名(绰号),对n 的任何操作就是对m 的操作。例如有人名叫王小毛, 他的绰号是“三毛

thisispan 3103

简单快速的理解c++中的指针与引用,以及为什么经常要用引用传递来代替值传递和引用的本质(包含指针常量和常量指针)。

指针常量:int * const p = &a 用 const 修饰 p,p是存放地址的,所以p存放的地址值也就是指针的指向不能改变,但是*p 也就是a的值是可以改变的。常量指针:int const* p = &a 用const 修饰*p,*p是变量a的值,所以*p的值不能修改,但是指针的指针可以改变。//表示的是a的地址由指针类型变量p来保存,通过*p解引用就能取到a的值。// 给a起一个别名b,b和a表示的内容相同,此时打印b的值为10。我们用值传递的方法写一个交换俩个变量的值的函数。

hxj_686的博客 950

ROS Python节点内实时录制Bag文件:高精度、可编程、抗崩溃

ROS Bag文件是机器人系统数据采集与回放的核心载体,其本质是基于时间戳的消息序列化存储格式。理解Bag的底层写入原理(如时间戳来源、索引机制、二进制序列化流程),有助于突破命令行工具的局限,实现毫秒级精度、条件触发、动态订阅的工程化录制。本文聚焦ROS1环境下纯Python原生集成rosbag.Bag API的实践路径,详解allow_unindexed=True抗崩溃机制、ROS时间戳对齐、环形缓冲批量写入等关键技术,覆盖AGV、无人机、自动驾驶等典型嵌入式场景的数据闭环需求。

weixin_33736832的博客 388

2017033000C++函数参数和返回值三种传递方式:值传递、指针传递和引用传递(着重理解)

之前作为自己学习资料,不知道集哪些大牛于一体,如若涉及到其他人,请与我联系

DerHaseBruder的博客 469

C/C++中的值传递,引用传递,指针传递,指针引用传递

写在最前面:本篇博客的主要内容参考了一位大佬的博客:C/C++中的值传递,引用传递,指针传递,指针引用传递,在这里贴出来以示尊敬! 在C++中,对子函数的调用过程中,常常有一下几种方式来传递参数:值传递、指针传递、引用传递以及指针引用传递。现将以上几种传递方式的原理及示例总结如下: 1、值传递 值传递的实质是:被调函数在执行过程中,对传递进来的实参值进行复制(在栈上开辟了新的内存空间)形成了局部变...

opencv_fjc的博客 571

C语言函数传参的三大误区:值传递、指针传递与引用传递深度对比

在C语言编程中,函数传参是一个基础且关键的概念。正确理解和运用函数传参的方式,对于编写高效、稳定的代码至关重要。然而,很多开发者在函数传参方面存在一些误区,尤其是对于值传递、指针传递和容易与指针传递混淆的引用传递(C语言本身没有严格意义上的引用传递,但在概念上常与指针传递对比)。本文将深入剖析这三种传参方式,揭示常见误区,并通过详细的代码示例进行对比,帮助技术人员准确掌握它们的区别和应用场景。

星辰夜语的博客 1746

C++ 引用传递,指针和两者都不用(值传递)

#include <iostream> using namespace std; //引用传递 void reference(int& b, int& c)//形参 { c = b * b; } //指针实现形参和实参的相互传递 void needle(int* b, int* c)//指针变量 { *c = *b * *b;//指针运算:b和c对应存储的是x...

方瘦__strayer的博客 361
上一篇: 面试题之随机答题(c++)
下一篇: Qt正则表达式(匹配正数、负数、浮点数)
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值