C++函数的出参

news/2025/1/7 3:30:54/文章来源:https://www.cnblogs.com/zeoHere/p/18653213

在C#中,在 函数或方法的参数前添加上out 或ref 时,这个参数就是出参了。

在C++中主要是通过指针和引用实现来类似的功能。

#include <iostream>// 使用指针作为出参
// getValues接受两个指向整数的指针,并通过这些指针修改了调用者提供的变量的值
void getValues(int *a, int *b) {*a = 10;*b = 20;
}// 使用引用作为出参
// getValuesRef接受两个整数的引用,并直接修改了调用者提供的变量的值
void getValuesRef(int &a, int &b) {a = 30;b = 40;
}int main() {int x, y;// 调用使用指针的函数getValues(&x, &y);std::cout << "Using pointers: x = " << x << ", y = " << y << std::endl;// 调用使用引用的函数getValuesRef(x, y);std::cout << "Using references: x = " << x << ", y = " << y << std::endl;return 0;
}

1、指针

指针可用直接操作所指向的内存地址,从而实现对变量的修改,达到类似于C#中ref和out的效果。

如下代码中,swap函数接受两个指向int类型的指针a和b,通过操作指针所指向的内存地址,实现了两个变量值的交换。

这类似于C#中ref的功能,因为可以在函数内部修改函数外部变量的值,并且在调用函数之前,变量需要先进行初始化。

#include <iostream>void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}int main() {int num1 = 5, num2 = 10;swap(&num1, &num2);std::cout << "num1: " << num1 << ", num2: " << num2 << std::endl;return 0;
}

2、引用

引用是变量的别名,对引用的操作实际上就是对原变量的操作。

在如下代码中,increment函数接受一个int类型的引用num,在函数内部对num的修改会直接反映到员变量number上。

这类似于C#中的ref关键字,既可以将值传入函数,又可以在函数内部修改该值反映到函数外部。

#include <iostream>void increment(int &num) {num++;
}int main() {int number = 5;increment(number);std::cout << "number: " << number << std::endl;return 0;
}

总结

虽然C++没有像C#那样直接在语法上区分ref和out,但通过灵活运用指针和引用,可以实现类似的功能。

通常情况下,如果只是想在函数内部修改外部变量的值,可以使用引用;如果需要在函数内部动态地分配内存并将结果返回给外部变量,可能会使用指针。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/864326.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python学习(四)——配套《PyTorch深度学习实战》

1. Python中字符串的相加和相乘 在Python中,字符串可以通过加号(+)进行相加(连接),也可以通过乘号(*)进行相乘(重复)。以下是这两种操作的详细说明和示例: 字符串的相加(连接) 字符串的相加是通过使用加号(+)运算符来实现的。它将两个或多个字符串连接成一个单一…

sql server版本太老,java客户端连接失败问题定位

背景 最近半路接手了一个系统的优化需求,这个系统有个遗留问题还没解决,随着新需求的上线,系统正式开放使用,这个遗留问题也必须解决。 这个系统大概是下面这样的,支持录入各种数据源的信息(ip、端口、数据库种类、账号密码等):录入完成后,可以查看这些数据源中的表、…

深入探索 Kubernetes:从基础概念到实战运维

前言:在当今数字化转型的浪潮中,Kubernetes 已然成为云原生应用部署与管理的核心力量。无论是初创企业寻求敏捷开发,还是大型企业应对复杂业务架构,掌握 Kubernetes 都能为你的技术之旅赋能。今天,就让我们一同深入 Kubernetes 的奇妙世界,揭开它神秘的面纱,从基础概念到…

Python 将html格式书签转为excel

1.导出html格式书签2.对数据做处理 提取 <a></a> 标签 可以用vscode正则替换 <a></a> 标签的ICON属性ICON=".*"3.安装python pip替换成清华镜像 4.描述问题生成代码 import pandas as pd from bs4 import BeautifulSoup from datetime i…

UML之发现用例

用例是最简单的UML元素,用例图是最简单的UML图,但它也可能是UML中最有用的元素之一。尽管我们用包将工作分解为工作包、团队任务或单项任务,也就是说包是组织UML中的各种图及元素的工具。但是用例图可以帮助我们确定任务,以及应当如何将它们分组并确定工作范围。 每个用例都…

遗留了很久的功能终于搞定/QTreeWidget自定义节点/添加删除修改分组

一、前言说明 这个功能看起来简单,实际上也确实简单,以前没搞的时候还以为很难,难点就是如何存储这个任意层级的树状列表信息,近期大环境经济很差,刚好有空把这个功能搞定,其实二维表格的方式存储这种任意层级树结构就可以,就是子节点需要指定父节点,父节点为空表示顶层…

2025年正在重塑行业的10款AI代理工具

序言:本文的作者列出来的这10款AI代理工具是您认可的吗? 作为一名深入AI开发领域超过十年的开发者,我见过无数工具声称要颠覆我们构建AI代理的方式。有些工具确实实现了夸下的海口——但更多的则没有。 经过几个月的亲身测试以及与同行开发者的讨论,我整理出了一份2025年真…

[cause]: TypeError: e_.createContext is not a function (Next.js 15)

开发 Next.js 项目遇到报错: [cause]: TypeError: e_.createContext is not a function 出现这个报错的原因是在 Next.js 项目中,在 Server Component 中使用了MUI组件,但是MUI组件没有做 SSR 适配就会导致这个报错。 解决办法 解决办法就是在文件顶部添加 use client 声明…

golang自带的死锁检测并非银弹

网上总是能看到有人说go自带了死锁检测,只要有死锁发生runtime就能检测到并及时报错退出,因此go不会被死锁问题困扰。 这说明了口口相传知识的有效性是日常值得怀疑的,同时也再一次证明了没有银弹这句话的含金量。 这个说法的杀伤力在于它虽然不对,但也不是全错,真真假假很…

2025多校冲刺省选模拟赛2

2025多校冲刺省选模拟赛2\(T1\) A. aw \(10pts/20pts\)部分分\(10 \sim 20pts\) :枚举每一种定向方案,略带卡常。点击查看代码 const int p=998244353; struct node {int nxt,to; }e[200010]; int head[100010],dis[1010][1010],a[100010],b[100010],g[2][100010],cnt=0; b…

jamovi 2.6 (Linux, macOS, Windows) - 统计软件

jamovi 2.6 (Linux, macOS, Windows) - 统计软件jamovi 2.6 (Linux, macOS, Windows) - 统计软件 open statistical software 请访问原文直链:https://sysin.org/blog/jamovi/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgjamovi适用于桌面和云的开放式统计软…