将二维数组传递给 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
而不是可变长度数组。
我为 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
而不是可变长度数组。