C++如何向函数传递数组?(代码示例)
技术百科
尼克
发布时间:2025-12-27
浏览: 次 C++中数组不能直接按值传递,需用指针+显式长度、std::array、std::vector或模板推导等方式;指针+长度最通用,兼容C风格,需传首地址和元素个数。
在C++中,数组不能直接按值传递给函数(会退化为指针),但有多种安全、清晰的方式实现“传数组”的效果。关键在于明确数组大小和生命周期,避免裸指针陷阱。
用指针
+ 显式长度(最通用,兼容C风格)
这是最基础也最灵活的方式,适用于动态分配或已知大小的数组。函数接收指向首元素的指针和元素个数。
void printArray(int* arr, size_t len) {
for (size_t i = 0; i < len; ++i) {
std::cout << arr[i] << " ";
}
std::cout << "\n";
}
int main() {
int data[] = {1, 2, 3, 4, 5};
printArray(data, std::size(data)); // C++17起可用std::size;否则写sizeof(data)/sizeof(data[0])
}
用引用传递定长数组(类型安全,推荐用于编译期确定大小)
通过模板或显式长度声明数组引用,编译器能检查大小,不会退化,且不拷贝数据。
templatevoid processArray(int (&arr)[N]) { std::cout << "Size: " << N << "\n"; for (int x : arr) std::cout << x << " "; } // 或非模板写法(仅适用于固定大小,如5) void handleFiveInts(int (&arr)[5]) { // 只接受恰好5个int的数组 }
用 std::array(现代C++首选,值语义+大小内建)
std::array 是栈上容器,保留大小信息,可按值或引用传递,支持范围for、size()等,无额外开销。
#include void foo(const std::array& arr) { // 推荐const引用避免拷贝 std::cout << "Size: " << arr.size() << "\n"; for (int x : arr) std::cout << x << " "; } int main() { std::array
a = {10, 20, 30, 40, 50}; foo(a); }
用 std::vector(适合运行时大小不确定或需扩容)
当数组大小在运行时决定,或需要增删元素时,std::vector 是自然选择。传 const 引用避免不必要的拷贝。
#includevoid sumVector(const std::vector & vec) { int s = 0; for (int x : vec) s += x; std::cout << "Sum: " << s << "\n"; } int main() { std::vector
v = {1, 2, 3, 4, 5}; sumVector(v); }
不推荐裸指针不带长度、也不建议按值传递原始数组(语法错误)。优先选 std::array 或 std::vector,兼顾安全与表达力。
# 这是
# 也不
# 适用于
# 关键在于
# c++
# 指针
# 栈
# 不带
# 不确定
# for
# const
# 值传递
# Array
# 定长
# 内建
# 可按
# 引用传递
# 自然选择
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- c# 在ASP.NET Core中管理和取消后台任
- Win11怎么查看局域网电脑_Windows 11
- Python包结构设计_大型项目组织解析【指导】
- Win11玩游戏全屏闪退怎么办_Win11全屏优化
- 用lighttpd能运行php吗_lighttpd
- 如何在Golang中引入测试模块_Golang测试
- Mac如何彻底清理浏览器缓存?(Safari与Ch
- Windows10电脑怎么设置电源按钮_Win10
- Windows11如何设置专注助手_Windows
- windows 10专注助手怎么关闭_window
- Python正则表达式实战_模式匹配说明【教程】
- 如何在Golang中捕获结构体方法错误_Golan
- 如何关闭Win10自动更新更新_Win10系统自动
- Win11怎么设置默认输入法 Win11固定中文输
- Win11任务栏颜色怎么改_Win11自定义任务栏
- 电脑无法识别U盘怎么办 Windows磁盘管理与驱
- Windows怎样拦截WPS弹窗广告_Window
- Win11怎么设置默认终端应用_Windows11
- Linux如何挂载新硬盘_Linux磁盘分区格式化
- Win11怎么开启空间音效_Windows11耳机
- C++如何使用Qt创建第一个GUI窗口?(入门教程
- Windows10系统怎么查看防火墙状态_Win1
- 如何高效获取循环末次生成的 NumPy 数组最后一
- 如何在Golang中实现RPC异步返回_Golan
- Win10电脑怎么设置网络名称_Windows10
- Win10电脑C盘红了怎么清理_Windows10
- php删除数据怎么清空表_truncate与del
- MAC怎么使用表情符号面板_MAC Emoji快捷
- Windows Defender扫描失败怎么办_安
- 如何在Golang中优化文件读写性能_使用缓冲和并
- Win11怎么清理C盘系统日志_Win11清理系统
- 如何在Golang中实现微服务服务拆分_Golan
- 如何使用Golang理解结构体指针方法接收者_Go
- php下载安装包怎么选_threadsafe与nt
- Win10如何备份驱动程序_Win10驱动备份步骤
- Win11如何暂停系统更新 Win11暂停更新最长
- Win11怎么关闭任务栏小组件_Windows11
- Python 中将 ISO 8601 时间戳转换为
- php怎么连接数据库_MySQL数据库连接的基础代
- Win10系统怎么查看网络连接状态_Windows
- 如何减少Golang内存碎片化_Golang内存分
- 如何在Golang中处理模块冲突_解决依赖版本不兼
- php8.4如何配置ssl证书_php8.4htt
- Win11开始菜单打不开_修复Windows 11
- Win10怎么创建桌面快捷方式 Win10为应用创
- c++ nullptr与NULL区别_c++11空
- Python性能剖析高级教程_cProfileLi
- Win11怎么更改任务栏位置_修改注册表将Win1
- 如何在 Go 中正确测试带 Cookie 的 HT
- Windows 11如何开启文件夹加密(EFS)_

+ 显式长度(最通用,兼容C风格)
QQ客服