首页 > 编程笔记 > C++笔记 阅读:21

C++数组作为函数参数(附带实例)

函数调用过程中有时需要传递多个参数,如果这些参数类型相同,可以通过数组的方式来传递参数。数组可以是一维的,也可以是二维的。

使用数组做函数参数,最典型的就是 main() 函数。带参数的 main() 函数形式如下:
int main(int argc,char *argv[])
main() 函数中的参数可以获取程序运行的命令参数,命令参数是执行应用程序时后面带的参数。

例如,在 CMD 控制台执行 dir 命令,可以带上“/w”参数,“dir /w”命令是以多列的形式显示文件夹内的文件名。main() 函数中参数 argc 获取命令参数的个数,argv 是字符指针数组,可以获取具体的命令参数。

【实例 1】获取命令参数。输出 main() 函数的参数内容,代码如下:
#include <iostream>
using namespace std;
int main(int argc,char *argv[])
{
    cout << "the list of parameter:" << endl;
    while(argc>1)
    {
        ++argv;
        cout << *argv << endl;
        --argc;
    }
}
运行结果如下图所示:


图 1 获取命令参数

上面的代码在工程 sample 中将生成 sample.exe 应用程序,在执行 sample.exe 时在后面加上参数,程序就会输出命令参数。

程序执行时,输入命令参数“/a /b /c”,程序运行以后将 3 个命令参数输出,每个参数都以空格隔开,应用程序后有 3 个空格,代表程序有 3 个命令参数,argc 的值为 3。

二维数组作为函数参数时,可以将其转换成一个一维指针数组。main() 函数中的 argv 数组就是一个二维字符数组。下面来看一个例子:

【实例 2】寻找最小值,定义一个寻找每行数组中最小值的 mix() 函数,在主函数中为数组赋值,然后调用 mix() 函数,具体代码如下:
#include <iostream>
using namespace std;
#define N 4

void mix(int (*a)[N], int m)     //定义 mix()函数,逐行进行比较,找到各行的最小元素
{
    int value, i, j;
    for(i = 0; i < m; i++)      //逐行比较
    {
        value = *(*(a + i));
        for(j = 0; j < N; j++)  //寻找最小值
            if(*(*(a + i) + j) < value)
                value = *(*(a + i) + j);
        cout << "line " << i;
        cout << ": the mix number is " << value << endl;
    }
}

int main()
{
    int a[3][N], i, j;
    int (*p)[N];
    p = &a[0];
    cout << "please input:" << endl;
    for(i = 0; i < 3; i++)      //输入 12 个数,为 3 行 4 列数组赋值
        for(j = 0; j < N; j++)
            cin >> a[i][j];
    mix(p, 3);                //调用 mix()函数,输出每行元素的最小值
}
程序运行结果为:

please input:
1
2
3
4
5
6
7
8
9
10
11
12
line 0: the mix number is 1
line 1: the mix number is 5
line 2: the mix number is 9

程序中,用户输入 12 个数,作为一个 3 行 4 列数组的元素;然后按行进行比较,输出每行的最小元素。*(a+i) 代表数组每行第一个元素,*(*(a+i)+j) 代表数组指定行中的某个列元素。函数 mix() 对数组各行元素逐一进行比较,将最小值赋给变量 value 并输出。

相关文章