0

这个函数在这里被问过几次,但我对一个特定的案例感兴趣。是否可以通过附加参数定义传递的数组的大小?

例如,假设我想要一个打印二维数组的函数。但是,我的数组可能每次都没有相同的尺寸。如果我可以有其他参数来定义该数组的大小,那将是理想的。我知道我可以n根据需要轻松地在此处切换数字,但如果我有更复杂的函数和单独的头文件,那么每次出现不同大小的数组时去编辑头文件似乎很愚蠢。以下结果error: use of parameter 'n' outside function body...我理解但想找到一些解决方法。我也尝试过g++ -std=c++11但仍然是同样的错误。

#include <iostream>
using namespace std;

void printArray(int n, int A[][n], int m) {
    for(int i=0; i < m; i++){
        for(int j=0; j<n; j++) {
            cout << A[i][j] << " ";
        }
        cout << endl;
    }
}

int main() {

    int A[][3] = {
        {1,2,3},
        {4,5,6},
        {7,8,9},
        {10,11,12}
    };

    printArray(3, A, 4);

    return 0;
}

据说,这可以用C99完成,并且在这个问题中也提到过,但我无法弄清楚 C++ 是如何做到的。

4

1 回答 1

3

这有效:

template<size_t N, size_t M>
void printArray( int(&arr)[M][N] ) {
  for(int i=0; i < M; i++){
    for(int j=0; j < N; j++) {
      std::cout << A[i][j] << " ";
    }
    std::cout << std::endl;
  }
}

如果您愿意将代码放在头文件中。作为奖励,它为您推断N和推断M

于 2014-11-03T21:28:57.750 回答