C++参数传递的四种方法

C++中嵌入python程序——参数传递 阅读详情
目前我所了解的主要有四种参数传递:

1.值传递 2.采用引用 3.采用指针 4.采用指针型引用 


1.值传递 :不能改变外部目标 a的值
class shu
{ 
public: 
void Out( int tempa )
{  
cout << "tempa值"  <<  tempa << endl;
tempa ++;
cout << "tempa值"  <<  tempa << endl;


}

}; 
int main(int argc, char **argv)
{
int a  = 1; 
 
shu  sss;
sss .Out( a ) ;
    cout << a << endl;//再一次输出a


system("pause");
return 0;
}
可以看出a在传入函数后实际上是进行了一次复制,所以目标a的值没有改变。


2.采用引用:能改变外部目标 a的值 
class shu
{ 
public: 
void Out( int &tempa )
{  
cout << "tempa值"  <<  tempa << endl;
tempa ++;
cout << "tempa值"  <<  tempa << endl;


}

}; 
int main(int argc, char **argv)
{
int a  = 1; 
 
shu  sss;
sss .Out( a ) ;
    cout << a << endl;//再一次输出a


system("pause");
return 0;
}
可以看出目标a 的值改变了,引用相当于是直接把外部的参数拿过来了。
3.采用指针:能改变外部目标 a的值
class shu
{ 
public: 
void Out( int * tempa )
{  
cout << "tempa值"  << *tempa << endl;
(*tempa) ++;
cout << "tempa值"  << *tempa << endl;


}

}; 
int main(int argc, char **argv)
{
int a  = 1; 
 
shu  sss;
sss .Out( &a ) ;
    cout << a << endl;//再一次输出a


system("pause");
return 0;
}
可以看出经过out函数,a的值改变为2。这说明采用指针来传参可以改变目标a的值。


4.采用指针型引用:为指针和引用的结合。可以直接把外部的指针拿进去用,同时也可以改变该指针对应的值:
class shu
{ 
public: 
void Out( int *&tempa )
{  
cout << "tempa值"  <<  *tempa << endl;
(*tempa )++;
cout << "tempa值"  <<  *tempa << endl;


}

}; 
int main(int argc, char **argv)
{
int a  = 1; 
    int *b = &a;
shu  sss;
sss .Out( b ) ;
    cout << a << endl;//再一次输出a


system("pause");
return 0;
}
可以看到 out函数直接把指针拿进去用了,改变了目标a  值。
综上所述:采用引用和指针型引用,在传参时不会造成参数的副本,可以直接把传入的参数拿来用。而值传递会造成副本。
指针传递虽然可以改变外部目标的值,但是指针在传入函数是也会造成副本。所以传参时有引用就没有副本,没有引用就
会产生副本。我感觉效率比较:值传递<指针传递<引用传递<指针型引用。
以上内容仅供参考,欢迎交流!
【C++】VS中读写操作(fclose.cpp)引发中断——将一个无效参数传递给了将无效参数视为严重错误的函数 阅读详情

相关推荐

C++11中如何创建线程?

通过函数指针创建线程 // 通过函数指针创建线程 #include <iostream> #include <thread> void counter(int id, int num_iterations) { for (int i = 0; i < num_iterations; ++i) { std::cout << "counter " << id << " has value ";

liugan528的博客 204

C/C++中函数参数传递的三种方式:值传递,指针传递,引用传递

对C/C++中函数传参的方式进行了介绍和说明

leesan0802的专栏 9014

智能座舱芯片大乱斗:高通8155 vs 联发科MT8676 vs 华为麒麟990A,谁才是性价比之王?

本文深入对比了高通SA8155P、联发科MT8676与华为麒麟990A三款主流智能座舱芯片的性能、生态与成本。文章从CPU/GPU/NPU算力、开发生态、成本模型及典型应用场景出发,分析了各自在智能座舱领域的优势与适用性,为开发者与车企选型提供了实战参考,并探讨了智能座舱芯片未来的技术趋势。

yhn456789的博客 802

c++调用exe并传递参数

1>D:\.\..cpp(25,5): error C2065: “CString”: 未声明的标识符。使用 #include 代替 #include 解决。argv:argument vector,argv[0]是程序相关信息。argc:argument count,值等于传入参数个数+1。用CreateProcess调用另一个exe并传入参数。调用exe代码,传递三个参数分别是20 30 40。

Already8888的博客 3896

安卓游戏存档修改全攻略:以《英雄迷宫冒险》为例(附避坑指南)

本文详细介绍了安卓游戏存档修改的全过程,以《英雄迷宫冒险》为例,涵盖基础认知、工具选择、实战修改及风险控制。通过十六进制编辑和UTF-8编码解析,玩家可以修改金钱、角色属性和物品数量等数据,同时提供了避坑指南和伦理考量,帮助玩家在享受修改乐趣的同时保持游戏体验的平衡。

weixin_29209801的博客 392

射频收发机(RF Transceiver)

2,既然原来外差的思路是把声音频率的信号,通过混频搬移到高频电磁波频率,那对高频率信号放大的时候,是不是也可以先在比较低的射频频率进行放大,然后再通过频率搬移的方式,将放大后的信号搬移到高频率呢?频率搬移过程中,中间预先设定的固定射频频率被称为“中频”(中间频率,IF,Intermediate Frequency),由于这个频率超出了声音可听的范围,是“超声波”(supersonic),所以被命名为“超外差”(Super-Heterodyne)。混频后的信号在0频率附近,可能会发生DC偏移。

2301_77317229的博客 1122

带输入参数的exe编写(C++)

以一个简单的例子作介绍 #include //ECHO.CPP main(int argc,char *argv[]) { for(int i=0;i<argc;i++)cout<<argv[i]<<'\t'; cout<<'\n'; }

niusiqiang的专栏 3634

eMMC FFU固件更新实战:从协议解析到设备修复

本文详细解析eMMC FFU固件更新技术,从协议原理到实战操作,涵盖EXT_CSD寄存器操作、命令流状态机解析及专业工具使用指南。通过真实维修案例,展示如何利用FFU机制修复设备故障,并提供高级优化技巧与安全注意事项,是硬件工程师和维修技术人员的实用参考。

weixin_29191761的博客 378

C++调用外部exe, 并传参获取返回值

C++调用外部exe, 并传参获取返回值调用exeCreateProcess函数原型CreateProcess示例 调用exe C++调用使用CreateProcess函数调用外部exe传参并获取其执行结果。 CreateProcess函数原型 MSDN官方地址介绍 BOOL CreateProcess( LPCWSTR pszImageName, // an exe file. LPCWSTR pszCmdLine, // parameter for your exe fi

qq_41883523的博客 7258

运行 ui5 serve 命令行报错的处理方法

如果大家运行 ui5 serve 命令行,报如下的错误消息: ui5 不是内部或外部命令,也不是可运行的程序: 只需要执行命令行,全局安装 ui5 cli(command line interface)这个命令行工具即可: npm install --global @ui5/cli 这个 ui5 cli 的入口执行文件,实际安装在了我 Node.js 的安装目录下: 更多Jerry的原创文章,尽在:“汪子熙”: ...

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1340

论文阅读: 2024 ICLR AutoDAN: Generating Stealthy Jailbreak Prompts on Aligned Large Language Models

AutoDAN: Generating Stealthy Jailbreak Prompts on Aligned Large Language Models这篇论文名为“AUTODAN: GENERATING STEALTHY JAILBREAK PROMPTS ON ALIGNED LARGE LANGUAGE MODELS”,主要研究大语言模型(LLMs)的越狱攻击问题,提出了一种名为AutoDAN的新方法,能自动生成隐蔽的越狱提示,具体内容如下:

CSPhD-winston的博客 1177

C++执行外部程序(调用外部exe程序)

参考一: 1.使用system函数 system("xxx.exe参数1参数2 参数3...) chars[300]; char*filename = "*****"; sprintf_s(s,"%s %s %s %s","....**.exe", "aa", "bb",filename); system(s); system 的一般格式为:syste

人生代码,代码人生。。。 5万+

【GlobalMapper精品教程】001:GlobalMapper23+24+25 Pro-x64中文汉化版安装教程(附软件包下载)

Global Mapper 23+V24+V25中文汉化版安装教程及免费下载地址,是一款非常专业的地图绘制软件,功能非常的丰富,内置距离和面积计算,包括光栅混合、对比度调节、海拔高度查询、视线计算以及一些高级功能,通过地表数据观察分水岭、对3Dpoint数据转换为三角多边形和网格化等设置。本文讲解GlobalMapper23.1 Pro-x64安装过程。

智慧空间实验室 3万+

C++中将二维数组(静态的和动态的)作为函数的参数传递,C++中创建二维数组的四种方法

C++中将二维数组(静态的和动态的)作为函数的参数传递

认真的虎的博客 1211

使用 MATLAB/Simulink + Simscape Electrical 构建一个他励直流电机的启动与制动过程仿真模型

直流电机在工业控制、电动车辆、自动化设备中广泛应用。其中,他励直流电机(Separately Excited DC Motor)因其励磁绕组与电枢绕组分别供电,具有良好的调速性能和启动特性,常用于需要平稳启动和精确控制的场合。在实际应用中,电机的启动过程和制动过程对电网、机械系统以及电机本身都具有重要影响。因此,仿真分析他励直流电机的启动与制动特性,是电机控制设计的重要环节。本文将详细介绍如何使用构建一个他励直流电机的启动与制动过程仿真模型,并通过仿真分析其动态响应。本文详细介绍了如何使用构建一个。

amy_mhd的博客 232

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

彻底搞懂cpp-httplib客户端参数传递:从入门到精通

你是否在使用cpp-httplib时遇到过参数传递的困惑?比如不知道如何正确发送查询参数、表单数据或JSON payload?本文将系统讲解cpp-httplib客户端参数传递的四种常用方式,帮助你轻松应对各种HTTP请求场景。读完本文,你将掌握查询字符串、表单数据、JSON请求和文件上传的实现方法,并能通过完整示例快速上手。 ## 项目简介 cpp-httplib是一个C++头文件仅需包含的...

gitblog_00576的博客 422

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

在 C++ 中实现 C 类访问 A 类属性的多种方法

在 C++ 编程中,当遇到如定义了ABC三个类,A创建BB创建C,而C类需要使用A类的其中一个属性这种场景时,有多种实现方式,每种方式各有优劣,适用于不同的编程需求。下面将详细探讨这些方法。

AC的博客 341

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C++静态成员函数访问非静态成员的几种方法

C++静态成员函数访问非静态成员的几种方法 文章目录C++静态成员函数访问非静态成员的几种方法方法一:方法二:方法三:方法四: 方法一: 有一个很取巧的办法,就是在静态函数的形参表里加上实例的地址,也就是 class A { public: static void test(A *a) { a->m_a += 1; } void hello() { } private: static int m_staticA; int

wolfGuiDao的博客 3429

C++ Primer阅读笔记--参数传递

C++11 新标准提供两种方法处理不同数量实参的函数,第一种是使用 initiallizer list 的标准库类型,其适用于不同数量但类型相同的实参传递;第二种是编写可变参数模板,用于处理不同数量且类型不同的实参传递;使用值传递时,初始值会拷贝给变量,对变量的改动不会改变初始值的值;使用指针传递时,同样会发生拷贝操作,拷贝的内容是。,这两个指针都能修改所指对象的值,因此指针传递可以修改初始值;,形参相当于初始变量的一个别名,修改形参会修改初始值;因此在函数中传递一个数组时,实际上传递的是。

牵一只蜗牛去散步 833

Unity3D中C#调用C++动态库总结

动态库是用C++和OpenCV写的。 我们可以这样给它分类, 1.普通传值,如下面代码中MotionDetect的第4个参数; 2.传引用,MotionDetect的第3个参数,nNum传进动态库后赋值再传回来; 3.引用传一个结构体,MotionDetect的第2个参数,这里其实是传一个结构体的数组,具体像加ref的传参还真不会; 4.传一个有分配内存的变量,需要用到GCHandle,

只有偏执狂才能生存 1万+

变量值改为由函数计算的结果的几种方法

2. 通过指针参数传递:可以通过函数的参数使用指针,将函数计算的结果存储在指针指向的变量中。3. 通过引用参数传递:可以通过函数的参数使用引用,将函数计算的结果存储在引用指向的变量中。4. 返回值:可以将函数计算的结果作为返回值返回,并将返回值赋值给变量。这些方法可以根据需要选择,选择合适的方法取决于函数的设计和变量的用途。在C++中,有几种方法可以将变量的值设置为由函数计算的结果。1. 直接赋值:可以直接将函数调用的结果赋值给变量。

Kegi_的博客 434

C参数传递

在swap1中对p和q操作只是对临时分配的栈中内容进行操作,函数执行完后形参就消失了,对原来的a和b不产生任何影响。所以swap1不能完成交换a和b值的功能.     swap3中,形参p和q会保存在栈中,p指向a的地址,q指向b的地址,使用temp指针完成了p和q的地址交换,即p指向b的地址,q指向了a的地址,但a和b地址中的值并未发生变化,这与swap2不同,swap2中是p指向的地址中的值

marvin-nj 300

C++笔记

C++笔记前言一、命名空间二、使用步骤1.引入库2.读入数据总结 前言 个人笔记 一、命名空间 为了解决在同一作用域中有名字冲突,C++引入了命名空间,通过作用域限制名字相同实体(定义在名称空间中的变量或者函数)之间的冲突,其中实体的可见域是从实体创建到该名称空间结束。在名称空间外,该实体是不可见的。命名空间中可以定义变量、常量、函数(可以是声明或定义)、结构体、类、命名空间等, C++中命名空间是通过using编译指令,若对某命名空间不熟悉,可能会定义与之相同名字的实体,造成冲突,所以建议通过usin

u012344185的博客 302

C++11多线程thread参数传递问题

目录 写在前面 thread类的构造函数 join函数 detach函数 thread中参数传递 类对象作为参数 类中函数作为参数 参考书籍 写在前面 多线程在很多地方都是必须要掌握的方法,这里先说一下,thread对象的参数传递问题 thread类的构造函数 thread() noexcept; //default constructor 其中noexc...

A_Bo的博客 3万+

C++中参数传递方式讨论

众所周知,在C++中调用函数时有三种参数传递方式: (1)传值调用; (2)传址调用(传指针); (3)引用传递; 实际上,还有一种参数传递方式,就是全局变量传递方式。这里的“全局”变量并不见得就是真正的全局的,所有代码都可以直接访问的,只要这个变量的作用域足够这两个函数访问就可以了,比如一个类中的两个成员函数可以使用一个成员变量实现参数传递,或者使用static关键字定义,或者使用namespa

阿泰 8808

C++中函数作为参数传递给其他函数

简单的说,如果有函数的参数声明为函数指针类型的。则可以给函数传入另一个函数作为它的参数,在函数的内部可以调用传入的函数: 例如下面给一些例子: int add(int x, int y) // 定义函数 { return x+y; } int subtract(int x, int y) // 定义函数 { return x-y; } // 函数作为参数传递给函数 //...

开到荼蘼的博客 2万+
上一篇: 指针++ 的写法
下一篇: memset()函数用法
CHF_VIP
博客等级 码龄14年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值