通过C和C++中的二维数组的比较

comparison of passing 2d array in C and C++

本文关键字:二维数组 比较 C++ 通过      更新时间:2023-10-16

在C 中

void foo(int size ,int a[][size])
{
    printf("%dn", 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++中任何与编译器相关的问题。。

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