一维数组作为参数
1、传入数组int[]
为了规范常常需要将数组的size一同传入,因为数组作为参数时数组在函数内退化为数组的首地址:int sum(int array[], int size)
2、传入数组首地址int *,与上面一种没有本质的区别:int sum(int * array, int size)
#include <iostream>
using namespace std;
int getAverage(int arr[], int size) { //传入指针的写法:int getAverage(int * arr, int size)
int sum = 0;
int avg = 0;
for (int i = 0; i < size; i++) {
sum += arr[i];
avg = sum / size;
return avg;
int main() {
int balance[5] = { 1000, 2, 3, 17, 50 };
int avg;
avg = getAverage(balance, 5); //传入指针时的实现也是这样,因为balance本身就是数组的首地址
cout << "平均值是:" << avg << endl;
return 0;
二维数组作为参数
与一维数组一样,但区别在于必须写出列数。数组在调用时存在降价的问题,实际函数得到的是一个指针,指向行向量构成的一维数组,这样每一个一维数组的size必须提前定义好,便于分配空间。
int sum(int arr[][4], int size)
int sum(int (*arr)[4], int size)
int sum(int **arr, int n, int m) //使用二维指针,n、m分别代表行数、列数
//二维数组的使用方法一:因为每一行都是单独new的,坏处是导致数组空间不连续
int sum(int** arr, int n, int m);
int** arr = new int* [n];
for (int i = 0; i < n; i++) {
arr[i] = new int[m];
for (int i = 0; i < n; i++) {
delete[] arr[i];
delete[] arr;
//二维数组使用方法二:内存空间连续
int sum(int** arr, int n, int m);
int** arr = new int* [n];
arr[0] = new int[n * m];
delete []arr[0];
delete []arr;
一般情况下前两种够用,但如果列大小未知,可以通过手动new、delete空间使用后面两种方式
函数返回数组
在C++中,数组不是一种类型,因此不能被直接返回,一般有两种方法来返回数组。
1、返回一个指向数组的指针
#include <iostream>
using namespace std;
int* getSum(int * arr0, int * arr1, int size) {
int *sum;
sum = new int[size];
for (int i = 0; i < size; i++) {
sum[i] = arr0[i] + arr1[i];
return sum;
int main() {
int A[5] = { 1000, 2, 3, 17, 50 };
int B[5] = { 100,200,300,400,500 };
int *sum;
sum = getSum(A, B, 5);
return 0;
2、返回一个结构形式。这种形式相对较安全,可以避免忘记释放指针而造成内存泄漏,也可以避免访问指针造成的错误。缺点是由于结构是先拷贝再返回,因此如果结构较大时,会影响效率和占用较大内存。
#include <iostream>
using namespace std;
class tag
public:
int a[10];
class tag Array()
for (int i = 0; i < 10; i++) {
X.a[i] = i + 1;
return X;
int main() {
class tag Y = Array();
for (int i = 0; i < 10; i++) {
cout << Y.a[i] << " ";
cout << endl;
return 0;