C++数组传递给函数实战指南
C++中如何将数组传递给函数
本指南通过真实代码示例,讲解如何在C++中将一维和多维数组传递给函数。
在C++中,数组可作为函数参数传递,甚至可通过指针间接返回。理解数组退化为指针的机制及其对内存和性能的影响,对于编写高效代码至关重要。
数组作为函数参数的语法
接受数组的函数声明如下:
returnType functionName(dataType arrayName[arraySize]) { // function body }
示例:
int total(int marks[5]) { // implementation }
此处,marks为包含5个元素的int数组。调用函数时,仅传递数组名(指向首元素的指针)。
示例1:将一维数组传递给函数
#include <iostream>
using namespace std;
// 声明显示成绩的函数
void display(int m[5]) {
cout << "Displaying marks:" << endl;
for (int i = 0; i < 5; ++i) {
cout << "Student " << i + 1 << ": " << m[i] << endl;
}
}
int main() {
int marks[5] = {88, 76, 90, 61, 69};
display(marks); // 以数组名传递
return 0;
}
输出
Displaying marks: Student 1: 88 Student 2: 76 Student 3: 90 Student 4: 61 Student 5: 69
关键点:
- 调用
display(marks);传递marks[0]的地址。 - 函数内
int m[5]被视为int* m;,指向同一内存。 - 修改
m[i]会改变原始marks数组,体现传引用语义。
将多维数组传递给函数
对于二维数组,必须指定列数(第二维大小),以便编译器计算元素偏移。
示例2:将二维数组传递给函数
#include <iostream>
using namespace std;
void display(int n[][2]) {
cout << "Displaying values:" << endl;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 2; ++j) {
cout << "num[" << i << "][" << j << "]: " << n[i][j] << endl;
}
}
}
int main() {
int num[3][2] = {{3, 4}, {9, 5}, {7, 1}};
display(num);
return 0;
}
输出
Displaying values: num[0][0]: 3 num[0][1]: 4 num[1][0]: 9 num[1][1]: 5 num[2][0]: 7 num[2][1]: 1
注意:
- 行数(3)可选,编译器可从数组定义推断。
- 指定列大小(
[][2])是正确指针运算的强制要求。
高维数组遵循相同规则:除第一维外,所有维度大小必须指定。
从函数返回数组
函数不能直接返回整个数组。而是返回指向首元素的指针,可能指向静态分配数组、动态数组或临时对象。必须避免返回指向局部(栈上)数组的指针,否则会产生悬空引用。
示例(静态数组):
int* getArray() {
static int arr[5] = {1, 2, 3, 4, 5};
return arr; // 返回首元素指针
}
动态分配时,建议返回std::vector<T>以保证安全和自动内存管理。
生产代码中安全数组处理的进一步阅读建议参考C++权威资源。
C语言
- 掌握 C# 锯齿数组:声明、初始化与访问完全指南
- 掌握 C++ 运算符:六大类型全解析与实战示例
- 掌握 C++ 函数:从基础到进阶的完整实战指南
- C++ 友元函数与友元类:突破访问控制的利器
- C 语言运算符完全指南:算术、关系、逻辑、位运算等
- C++ 数组完全指南:声明、初始化、多维数组与指针技巧
- C++ 动态数组分配实战指南:new/delete、初始化、扩容与内存管理
- C++ 运算符重载实战指南:语法、方法、限制与代码示例
- C++ 函数详解:从声明到调用的实战指南
- C 语言编程入门:全面教程指南
- C++重载机制深度解析:函数重载与运算符重载全攻略
- C++多态实战指南:虚函数、动态绑定与纯虚函数