将2D数组传递给c&;中的函数;c++; 我尝试了C+C++的相同程序,即将2D数组传递给函数。 以下程序在C语言中工作, 但不能在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
#包括
无效通行证(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,但是
int n;
scanf("%d",&n);
int arr[n][n];