讲师中心 微信公众号
AI工具推荐 视频效率加速

C++结构体如何作为函数参数传递 值传递与引用传递的区别

老辰酱_7764

老辰酱_7764

发布时间:2025-06-28 09:01:01

|

407人浏览过

|

来源于php中文网

原创

在c++中,结构体作为函数参数传递主要有两种方式:值传递和引用传递。1. 值传递会复制一份结构体,函数内操作的是副本,对成员的修改不影响外部,适用于小结构体或不希望原数据被改动的情况;2. 引用传递直接操作原始结构体,避免复制开销,适合大型结构体或需要修改原始数据的场景;3. 若不希望修改结构体又想避免复制,可使用const引用;选择方式时应根据结构体大小、是否需要修改原始数据以及性能需求进行判断。

C++结构体如何作为函数参数传递 值传递与引用传递的区别

在C++中,结构体作为函数参数传递主要有两种方式:值传递和引用传递。它们的核心区别在于是否复制结构体本身,以及对原始数据的修改是否会保留。

C++结构体如何作为函数参数传递 值传递与引用传递的区别

值传递:复制一份结构体

当你把结构体以值传递的方式传给函数时,函数会创建一个该结构体的副本。这意味着:

C++结构体如何作为函数参数传递 值传递与引用传递的区别
  • 函数内部操作的是副本,不是原始结构体;
  • 对结构体成员的修改不会影响到外部;
  • 如果结构体较大,复制过程可能会带来性能开销。

举个例子:

立即学习“C++免费学习笔记(深入)”;

struct Student {
    int age;
    string name;
};

void changeStudent(Student s) {
    s.age = 20;
}

Student stu;
stu.age = 18;
changeStudent(stu);
// 此时 stu.age 仍然是 18

这种写法适合结构体很小、或者你不希望原数据被改动的情况。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
C++结构体如何作为函数参数传递 值传递与引用传递的区别

引用传递:直接操作原结构体

使用引用传递时,函数不会复制结构体,而是通过引用来访问原始数据。好处包括:

  • 避免了复制带来的性能损耗;
  • 在函数内对结构体的修改会影响原始数据;
  • 更适合处理大型结构体或需要修改原始数据的场景。

示例代码如下:

void changeStudent(Student& s) {
    s.age = 20;
}

Student stu;
stu.age = 18;
changeStudent(stu);
// 现在 stu.age 变成了 20

如果你不希望函数修改结构体,但又想避免复制,可以加上 const:

void printStudent(const Student& s) {
    cout << s.name << " is " << s.age << endl;
}

这样既能避免拷贝,又能防止意外修改。


如何选择值传递还是引用传递?

你可以根据以下几个点来判断应该用哪种方式:

  • 结构体大小:
    • 小结构体(比如只有几个int):值传递也可以接受;
    • 大结构体(包含数组、字符串等):优先用引用;
  • 是否需要修改原始数据:
    • 不改 → 用 const 引用;
    • 要改 → 用非 const 引用;
  • 性能考虑:
    • 频繁调用的函数中,尽量避免值传递,减少内存开销;

基本上就这些。结构体传参看似简单,但选错方式可能影响程序效率甚至逻辑正确性,尤其在项目变大以后更容易暴露问题。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

相关专题

更多
c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2358

2023.09.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1858

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2984

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6284

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

6229

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

7814

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

11874

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

6139

2025.07.29

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

0

2026.11.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn