为了账号安全,请及时绑定邮箱和手机立即绑定

C —将2d数组作为函数参数传递?

C —将2d数组作为函数参数传递?

C
qq_花开花谢_0 2019-10-21 11:24:43
可以很容易地定义一个接受如下1d array参数的函数:int MyFunction( const float arr[] ){        // do something here, then return...    return 1}虽然定义,如:  int MyFunction( const float* arr )将正常工作。如何定义一个接受2d array参数的函数?我知道int MyFunction( const float** arr )这可行: -但是,可以使用使用的第一个变体[]吗?
查看完整描述

3 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

在C99中,可以在传递数组之前提供数组的尺寸:


 void array_function(int m, int n, float a[m][n])

 {

      for (int i = 0; i < m; i++)

          for (int j = 0; j < n; j++)

              a[i][j] = 0.0;

 }



 void another_function(void)

 {

     float a1[10][20];

     float a2[15][15];

     array_function(10, 20, a1);

     array_function(15, 15, a2);

 }


查看完整回答
反对 回复 2019-10-21
?
狐的传说

TA贡献1804条经验 获得超3个赞

尝试这样的事情:


int MyFunction(size_t ncols, const float arr[][ncols])

{    

    // ...

}


查看完整回答
反对 回复 2019-10-21
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

当我们将2D数组作为参数传递给函数时,可以选择指定最左边的尺寸。此处的关键是何时对函数进行的任何更改都反映在调用函数中,因为当我们将2D数组作为参数传递时意味着实际上是函数接收指向一维数组的指针。大小就是列数。例子


1- int funct(int (*a) [4]);


这里的a是指向整数数组的指针。我们也可以这样简单地通过


2 void funct(int a[][4]);


正如我之前说过的,最左侧总是可选的。在第一个示例中,a的大小将为4,因为它通常只是指针。* a的大小为16,因为我们有4列,每列有4个字节,所以4 * 4 = 16个字节。


但是最可取的方式是始终使用动态内存分配。


我希望你能明白


查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 493 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信