将2D数组传递给c&;中的函数;c++; 我尝试了C+C++的相同程序,即将2D数组传递给函数。 以下程序在C语言中工作, 但不能在C++中工作, 请解释一下原因

将2D数组传递给c&;中的函数;c++; 我尝试了C+C++的相同程序,即将2D数组传递给函数。 以下程序在C语言中工作, 但不能在C++中工作, 请解释一下原因,c++,c,arrays,syntax,variable-length-array,C++,C,Arrays,Syntax,Variable Length Array,在C中 #包括 无效通行证(int n,int arr[][n])//或无效通行证(int n,int(*arr)[n]) { printf(“%d”,arr[0][0]); //..... } int main() { int n; scanf(“%d”和“&n”); 国际航空公司[n][n]; arr[0][0]=0; 通过(n,arr); 返回0; } 在C中++ #include <bits/stdc++.h> using namespace std; void pass

在C中

#包括
无效通行证(int n,int arr[][n])//或无效通行证(int n,int(*arr)[n])
{
printf(“%d”,arr[0][0]);
//.....
}
int main()
{
int n;
scanf(“%d”和“&n”);
国际航空公司[n][n];
arr[0][0]=0;
通过(n,arr);
返回0;
}

在C中++

#include <bits/stdc++.h>
using namespace std;
void pass(int n, int arr[][n])  // or void pass(int n, int (*arr)[n])
{
cout << arr[0][0];
//.....
}

int main()
{
int n; 
   cin >> n;
int arr[n][n];
arr[0][0]=0;
pass(n,arr);
return 0;
}
#包括
使用名称空间std;
无效通行证(int n,int arr[][n])//或无效通行证(int n,int(*arr)[n])
{
cout>n;
国际航空公司[n][n];
arr[0][0]=0;
通过(n,arr);
返回0;
}
3:29:错误:在']'标记之前的函数体外部使用参数 无效通行证(int n,int arr[][n])//或无效通行证(int n,int(*arr)[n])

6:9:错误:“arr”未在此作用域中声明 不能这些说法吗

int n;
scanf("%d",&n);  
int arr[n][n];
提供可变长度数组的声明。可变长度数组是一种数组,其维数取决于运行时值。这是C语言的一个特性,编译器可以有条件地支持它

在C++中没有这样的标准特征。因此C++编译器会发出错误。在C++中,数组的维数应该是编译时常数。虽然有些C++编译器可以有自己的C++语言扩展,但是可以包含可变长度数组的特性。
C++中使用类模板<代码> STD::vector < /C> >而不是可变长度数组。

这不应该太令人惊讶,C和C++是不同的语言。代码也不会编译,因为FoTrc++是C的超集,C中有一些不是有效的C++(如EG VLA一样在问题中);C++中有一些东西在C++中有不同的含义(例如EG <代码> sieOf' $ $ /代码>意思是代码> > sieOf(int) > c,但是 > sieOf(char)< /c>在C++中。建议很好,但是这里似乎不是由大多数编译器所接受的VLA声明本身,但是C++中没有一个简单的、干净的方式传递它们作为函数的参数。另一个不使用它们的有力理由
int n;
scanf("%d",&n);  
int arr[n][n];