我为C& C++尝试了相同的程序,即将2D数组传递给函数。下面的程序在C语言中工作,但在C++中不工作,请解释为什么?
在C中
#include<stdio.h>
void pass(int n, int arr[][n]) // or void pass(int n, int (*arr)[n])
{
printf("%d",arr[0][0]);
//.....
}
int main()
{
int n;
scanf("%d",&n);
int arr[n][n];
arr[0][0]=0;
pass(n,arr);
return 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;
}
3:29:错误:在“]令牌空传递( int n,int arr) //或void (int n,int (*arr)n)之前使用参数外部函数体
6:9:错误:“arr”未在此范围内声明cout << arr;*
发布于 2019-11-23 03:05:27
这些陈述
int n;
scanf("%d",&n);
int arr[n][n];
提供可变长度数组的声明。可变长度数组是取决于运行时值的数组维数。编译器可以有条件地支持C的一个特性。
在C++中没有这样的标准特性。因此,C++编译器发出一个错误。在C++中,数组的尺寸应该是编译时常数.尽管有些C++编译器可以有自己的C++语言扩展,但它可以包含可变长度数组的特性。
在C++中,使用类模板std::vector
而不是可变长度数组。
https://stackoverflow.com/questions/59006901
复制相似问题