0

0

c++如何将数组传递给函数_C++数组参数传递方式详解

尼克

尼克

发布时间:2025-11-09 20:42:02

|

636人浏览过

|

来源于php中文网

原创

数组名作为指针传递,实际传的是首元素地址,函数接收的是指针而非副本,因此无法直接获取数组大小,需额外传参。

c++如何将数组传递给函数_c++数组参数传递方式详解

在C++中,将数组传递给函数是一个常见但容易误解的问题。很多人误以为可以像普通变量一样直接“传值”给函数,但实际上数组的传递有其特殊性。下面详细说明C++中数组作为函数参数的几种正确方式及其原理。

1. 数组名作为指针传递

当把数组名作为实参传递给函数时,实际上传递的是数组首元素的地址,也就是一个指针。这意味着函数接收到的并不是整个数组的副本,而是指向数组第一个元素的指针。

例如:

void printArray(int arr[], int size) {
    for (int i = 0; i         std::cout     }
    std::cout }

调用方式:

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

int data[] = {1, 2, 3, 4, 5};
printArray(data, 5);

这里 arr[] 的写法只是语法糖,等价于 int* arr。函数内部对 arr 的操作实质上是对原数组的访问,因此修改 arr[i] 会影响原始数组。

2. 显式使用指针参数

为了更清晰地表达意图,可以直接使用指针形式声明参数:

void printArray(int* arr, int size) {
    // 与上面完全相同
}

这种写法强调了传参的本质——传递地址。它和 int arr[] 在编译后是完全一样的,选择哪种风格取决于代码可读性的偏好。

Android_Intent详解 WORD版
Android_Intent详解 WORD版

本文档主要讲述的是Android_Intent详解;Intent 是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯。比如说调用startActivity()来启动一个activity,或者由broadcaseIntent()来传递给所有感兴趣的BroadcaseReceiver, 再或者由startService()/bindservice()来启动一个后台的service.所以可以看出来,intent主要是用来启动其他的activity

下载

3. 引用方式传递数组(保留数组大小信息)

如果希望避免退化为指针,并且让函数知道数组的实际大小,可以使用引用传递:

template
void printArray(int (&arr)[N]) {
    for (int i = 0; i         std::cout     }
    std::cout }

这种方式不会发生数组到指针的退化,N 是模板推导出的实际数组长度。调用时无需传 size,编译器自动识别:

int data[] = {1, 2, 3};
printArray(data); // 自动推导 N = 3

注意:该方法只能用于固定大小的数组,不能用于动态分配或指针变量。

4. 使用 std::array 或 std::vector(推荐现代C++做法)

对于现代C++开发,建议使用标准库容器替代原生数组:

#include
#include
void processArray(const std::array& arr) {
    for (int x : arr) std::cout }

void processVector(const std::vector& vec) {
    for (int x : vec) std::cout }

优点包括:

  • 支持拷贝、赋值
  • 自带大小信息(.size())
  • 可被完整传递,不会退化为指针
  • 更安全,不易越界

特别是 std::vector,适用于大小不固定的场景;而 std::array 适合固定长度且追求性能的情况。

基本上就这些。理解数组传参的关键在于明白“数组名作为函数参数时会退化为指针”,若需保留维度或类型信息,应使用引用或标准库容器。不复杂但容易忽略细节。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

463

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

544

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

93

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

197

2025.08.29

javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

177

2023.11.23

java中void的含义
java中void的含义

本专题整合了Java中void的相关内容,阅读专题下面的文章了解更多详细内容。

98

2025.11.27

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

0

2026.01.29

clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址
clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址

clawdbot龙虾机器人官网入口:https://clawd.bot/,clawdbot ai是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

0

2026.01.29

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

2

2026.01.29

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8万人学习

Django 教程
Django 教程

共28课时 | 3.6万人学习

Excel 教程
Excel 教程

共162课时 | 14万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号