C通过动态大小的2D数组来运行

我试图弄清楚如何传递2D数组,它是动态构造的一个函数.

我知道必须指定列数,但我的情况取决于用户输入.

有没有解决方法?

例:

// Some function
void function(matrix[i][j]) {
// do stuff
}
// Main function
int N;
cout << "Size: ";
cin >> N;

int matrix[N][N];

for (int i=0;i<N;i++) { // 
 for (int j=0;j<N;j++) { 
  cin >> matrix[N][N];
 }
}

sort(matrix);

你明白了:)

最佳答案 如果你在C,合理的选择是:

>使用boost :: multi_array(推荐),或
>制作自己的2D数组类.好吧,你没必要,但是在一个类中封装二维数组逻辑是有用的,并使代码干净.

手动2D数组索引将如下所示:

void func(int* arrayData, int arrayWidth) {
    // element (x,y) is under arrayData[x + y*arrayWidth]
}

但是说真的,无论是用课程包装还是享受Boost已经为你准备好了这门课程.手动索引这个很烦人,使代码更加不洁净且容易出错.

编辑

http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html说C99还有一个解决方案:

void func(int len, int array[len][len]) {
   // notice how the first parameter is used in the definition of second parameter
}

也应该在C编译器中工作,但我从未使用过这种方法.

点赞