2

在 C 中

void foo(int size ,int a[][size])
{
    printf("%d\n", a[0][0]);
}
int main(int argc, char const *argv[])
{
    int a[5][5] = {0};
    foo(5, a);
    return 0;
}

工作正常

但在 C++ 中也是如此

void foo(int size, int a[][size])
{
    cout << a[0][0] << endl;
}
int main(int argc, char const *argv[])
{
    int a[5][5] = {0};
    foo(5, a);
    return 0;
}

不工作。它给出了两个错误:

 error: use of parameter ‘size’ outside function body
 In function ‘void foo(...)’:
 error: ‘a’ was not declared in this scope

谁能解释为什么会这样。还请用 C 或 C++ 解释任何与编译器相关的问题。

4

1 回答 1

7

C++ 不再是 C 的超集。您正在使用 C 可变长度数组功能,而 C++ 没有等效功能。这是非法的 C++,坦率地说,这是非常糟糕的做法。使用std::array和模板。这就是他们的目的。因为 C 数组很糟糕。

于 2013-07-10T18:41:51.100 回答