C++ 如何在不使用指针的情况下将动态2d数组传递给函数?

C++ 如何在不使用指针的情况下将动态2d数组传递给函数?,c++,arrays,function,parameters,variable-length-array,C++,Arrays,Function,Parameters,Variable Length Array,我试过了,但不起作用! 有人能帮我吗这很重要:( #包括 使用名称空间std; INTA[100][100]; 无效读取(整数a[][100],整数n) { int i,j; 对于(i=0;ia[i][j]; } int main() { int n; cin>>n; INTA[n][n]; 读(a,n); } 通过引用传递数组的语法不清楚: void read(int (&a)[100][100], int n) 导致 #include <iostream> void

我试过了,但不起作用! 有人能帮我吗这很重要:(

#包括
使用名称空间std;
INTA[100][100];
无效读取(整数a[][100],整数n)
{
int i,j;
对于(i=0;ia[i][j];
}
int main()
{
int n;
cin>>n;
INTA[n][n];
读(a,n);
}

通过引用传递数组的语法不清楚:

void read(int (&a)[100][100], int n)
导致

#include <iostream>

void read(int (&a)[100][100], int n)
{
  for(int i = 0; i < n; i++)
       for(int j = 0; j < n; j++)
           std::cin >> a[i][j];
}

int main ()
{
    int n;
    std::cin >> n;
    int a[100][100];
    read(a, n);
}

通过引用传递数组的语法不清楚:

void read(int (&a)[100][100], int n)
导致

#include <iostream>

void read(int (&a)[100][100], int n)
{
  for(int i = 0; i < n; i++)
       for(int j = 0; j < n; j++)
           std::cin >> a[i][j];
}

int main ()
{
    int n;
    std::cin >> n;
    int a[100][100];
    read(a, n);
}

因为这是C++的标记。我想建议使用它。它是非常有用的动态容器。你可以调整它,清除它,然后很容易地填充它。一旦你理解它的基本用法,它会在你未来的C++开发中很有用。我稍微修改了你的代码:

#include <iostream>
#include <vector>
using namespace std;

void read(vector<vector<int> >& arr,int n)
{
  int i,j;
  for(i=0;i<n;i++)
       for(j=0;j<n;j++)
           cin>>arr[i][j];
}
int main ()
{
    int N;
    cin>>N;
    vector<vector<int> > arr(N, vector<int>(N));
    read(arr, N);
}
#包括
#包括
使用名称空间std;
无效读取(矢量和arr,整数n)
{
int i,j;
对于(i=0;iarr[i][j];
}
int main()
{
int N;
cin>>N;
向量arr(N,向量(N));
读取(arr,N);
}
它们比基本数组有许多优点,比如可以轻松初始化,假设您希望将所有的数组初始化为零:

vector<vector<int> > arr(N, vector<int>(N, 0));
向量arr(N,向量(N,0)); 您不必担心在传入函数时添加数组大小。vector可以轻松处理此问题:

for(i = 0; i < arr.size(); i++) {
  for(j = 0; j < arr[i].size(); j++) {
    // do stuff
  }
}
for(i=0;i

此外,使用了标准模板库的添加方法,如:代码>填充< /代码>,代码>交换< /COD>。许多操作都可以很容易处理。

因为这是标记C++。我建议使用它。它是非常有用的动态容器。可以调整大小,清楚地填充它。一旦了解了它的基本用法,它就可以使用。在你未来的C++开发中,你会很方便的。我稍微修改了你的代码:

#include <iostream>
#include <vector>
using namespace std;

void read(vector<vector<int> >& arr,int n)
{
  int i,j;
  for(i=0;i<n;i++)
       for(j=0;j<n;j++)
           cin>>arr[i][j];
}
int main ()
{
    int N;
    cin>>N;
    vector<vector<int> > arr(N, vector<int>(N));
    read(arr, N);
}
#包括
#包括
使用名称空间std;
无效读取(矢量和arr,整数n)
{
int i,j;
对于(i=0;iarr[i][j];
}
int main()
{
int N;
cin>>N;
向量arr(N,向量(N));
读取(arr,N);
}
与基元数组相比,它们有许多优点,例如它们可以轻松初始化,假设您要将all初始化为零:

vector<vector<int> > arr(N, vector<int>(N, 0));
向量arr(N,向量(N,0));
您不必担心在传入函数时添加数组大小。vector可以轻松处理此问题:

for(i = 0; i < arr.size(); i++) {
  for(j = 0; j < arr[i].size(); j++) {
    // do stuff
  }
}
for(i=0;i

<> P>此外,还使用了标准模板库的添加方法,如:代码>填充>代码>代码>交换< /代码>。许多操作都可以很容易处理。

<代码> int [n] [n];< />代码是VLA,不是标准C++。您应该切换参数。如果您以前写的代码“int n< /CODE >,您可以使用数组大小的值:<代码>无效读取(int n,int a[][n])
您对
a[][]
的声明存在冲突,这是
c++
。为什么不使用
std::vector
?它是专为这种情况设计的。@RohanKumar所有
a
都在不同的范围内,因此没有冲突。
int a[n][n]如果你写的是代码> int n>代码>,你可以使用数组大小的值:<代码>无效读取(int n,int a[][n])< /C++ >你有冲突的声明<代码> a[][]
它是
c++
。为什么不使用
std::vector
?它完全是为这种情况而设计的。@RohanKumar所有
a
都在不同的范围内,所以没有冲突。是的,我会尝试这个。是的,我会尝试这个