将二维数组传递给 C 函数

新手上路,请多包涵

我有一个函数,我想将一个可变大小的二维数组作为参数。

到目前为止,我有这个:

 void myFunction(double** myArray){
     myArray[x][y] = 5;
     etc...
}

我在代码的其他地方声明了一个数组:

 double anArray[10][10];

但是,调用 myFunction(anArray) 会给我一个错误。

我不想在传入数组时复制它。在 myFunction 中所做的任何更改都应该改变 anArray 的状态。如果我理解正确,我只想将指向二维数组的指针作为参数传递。该函数还需要接受不同大小的数组。例如, [10][10][5][5] 。我怎样才能做到这一点?

原文由 RogerDarwin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 931
2 个回答

将二维数组传递给函数有三种方法:

  1. 参数是一个二维数组
   int array[10][10];
   void passFunc(int a[][10])
   {
       // ...
   }
   passFunc(array);

  1. 参数是一个包含指针的数组
   int *array[10];
   for(int i = 0; i < 10; i++)
       array[i] = new int[10];
   void passFunc(int *a[10]) //Array containing pointers
   {
       // ...
   }
   passFunc(array);

  1. 参数是指向指针的指针
   int **array;
   array = new int *[10];
   for(int i = 0; i <10; i++)
       array[i] = new int[10];
   void passFunc(int **a)
   {
       // ...
   }
   passFunc(array);

原文由 shengy 发布,翻译遵循 CC BY-SA 3.0 许可协议

#include <iostream>

using std::cout;

template <typename table>
void PrintArray(table& a) {
    const size_t rows = sizeof(a) / sizeof(a[0]);
    const size_t cols = sizeof(a[0]) / sizeof(a[0][0]);
    cout << "Array has " << rows << " rows and " << cols << " columns.\n\n";
    for (size_t i = 0; i < rows; i++) {
        for (size_t j = 0; j < cols; j++) {
            cout << a[i][j] << ' ';
        }
        cout << '\n';
    }
}

int main()
{
    size_t a[5][8]{}; // you can change the type and size of the 2D array
    PrintArray(a);
    return 0;
}

原文由 q-l-p 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题