如何将数组传递给函数?

时间:2016-01-05 16:54:38

标签: c++ arrays parameter-passing pass-by-reference

代码:

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':未声明的标识符

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您应该在main函数中声明您的数组,<{1}}函数中的而不是。在C ++中,一旦执行从定义了对象的块中传出,对象(包括数组)就会被销毁。所以在你的代码中

case...

一旦执行离开函数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

(代码取自this回答)

BTW传递引用语法很少用于数组,因为即使省略了引用符号void case1(int (&A)[MAXROW][MAXCOL]) { // do use array here } ,代码也能正常工作:

&

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

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

这两个变体也起作用的原因is a bit technical - 在这些变体中,传递的东西是指向一维数组的指针,而不是对二维数组的引用。我想避免提及它们,但它确实不可能,因为它们被广泛使用(可能是因为它们可以由C编译器编译)。