将二维数组传递给 C 和 C++ 中的函数

Passing 2D array to a funciton in c & c++

我为 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:error: use of parameter outside function body before ']' token void pass(int n, int arr[][n]) // or void pass(int n, int (*arr)[n])

6:9:error: 'arr' was not declared in this scope cout << arr[0][0];*

这些陈述

int n;
scanf("%d",&n);  
int arr[n][n];

提供可变长度数组的声明。可变长度数组是一个数组维度取决于 运行 时间值。编译器可能有条件地支持它是 C 的一个特性。

在 C++ 中没有这样的标准功能。所以 C++ 编译器会报错。在 C++ 中,数组的维度应为编译时常量。虽然一些 C++ 编译器可以有自己的 C++ 语言扩展,可以包括可变长度数组的特性。

在 C++ 中,使用 class 模板 std::vector 而不是可变长度数组。