如何将数组传递给函数

How to pass an array to a function?

本文关键字:函数 数组      更新时间:2023-10-16

代码:

void case1();
void case2();
void case3();
void case4();
void case5();
//Global variables
const int MAXROW = 5;
const int MAXCOL = 5;
int main()
{
    ........
    ...
MENU(with do while)
}
void case1()
{
    int A[MAXROW][MAXCOL] = { 0 };
    for (int r = 0; r < MAXROW; ++r)
        for (int c = 0; c < MAXCOL; ++c) {
            cout << "n A[" << r << "][" << c << "]= ";
            cin >> A[r][c];
        }
}
void case2()
{
    ...
}
//Function to find average of negatives
void case3()
{
    int negNumber = 0;
    double average = 0;
    for (int r = 0; r < 6; ++r) {
        for (int c = 0; c < 6; ++c) {
            if...
}
void case4()
{//Function to find product of numbers different from 0
    ...
}
void case5()
{
    ...
}

如您所见,输入数组位于case1()中。我想知道的是如何在所有其他函数(case2case3case4case5)中使用此数组。

我该怎么做?

如何在菜单中调用它们?例如case2():

case '2': {
    case2(......);

目前,我的错误列表中充满了类似的消息

"A":未声明的标识符

您可以通过引用传递数组,例如:

void case1(int (&A)[MAXROW][MAXCOL])
{
  // do use array here
}

您应该在main函数中声明数组,而不是在其中一个case...函数中声明。在C++中,一旦执行超出定义对象的块,对象(包括数组)就会被销毁。所以在你的代码

void case1()
{
    int A[MAXROW][MAXCOL] = { 0 };
    ...
}

一旦执行离开函数case1,则阵列A被破坏。当编译器抱怨未知名称A时,它会尝试告诉您这一点。这不是你想要的!相反,这样做:

int main()
{
    int A[MAXROW][MAXCOL] = { 0 };
    ...
    // your menu code
    ...
    switch (menu_result)
    {
    case 1: case1(A); break;
    case 2: case2(A); break;
    case 3: case3(A); break;
    case 4: case4(A); break;
    case 5: case5(A); break;
    }
}

在这里,您将数组A传递给您的函数。为了使此代码工作,您应该声明您的函数接收数组作为参数:

void case1(int (&A)[MAXROW][MAXCOL])
{
  // do use array here
}

(代码取自此答案)


顺便说一句,pass-by-reference语法很少用于数组,因为即使省略了引用符号&:,代码也能工作

void case2(int A[MAXROW][MAXCOL]) // also works; does the same
{
}

在这种情况下,您也可以省略数组的外部维度:

void case3(int A[][MAXCOL]) // also works; does the same
{
}

这两个变体也起作用的原因有点技术性——在这些变体中,传递的是指向一维数组的指针,而不是指向二维数组的引用。我想避免提及它们,但这真的不可能,因为它们被广泛使用(可能是因为它们可以由C编译器编译)。