【问题标题】:passing fix array to a function (to modify it)将修复数组传递给函数(修改它)
【发布时间】:2017-07-22 08:37:08
【问题描述】:

我定义了一些需要使用通用函数编写的修复数组:

uint8 myArray_A[3][5];
uint8 myArray_B[3][5];

void doThings(uint8 * in)
{
  *in[0][0] = someValue_0
  *in[0][1] = someValue_1
}

这个函数我会调用另一个函数并给它需要的数组:

void main(void)
{
  doThings(myArray_A);
}

这是这样做的方法吗?它会起作用吗?

【问题讨论】:

  • 固定双维数组必须始终包含第一个维度的大小。你所拥有的不会编译。
  • 抱歉,需要二次元
  • 语言是什么?看起来像 C/C++

标签: arrays function


【解决方案1】:

您的函数需要一个指向整数的指针,即单个整数在内存空间中的位置。 这意味着当您将指针传递给您的数组时(即数组中第一个元素的地址 - &myArray_A[0][0]),您将丢失包含在 myArray_A 定义中的结构信息 - 数组的大小。

但是,这可以通过在函数声明中指定数组参数来解决。 这可以通过使用typedef int[3][5] my_array_t 定义数组类型或通过在参数void doThings(uint8[3][] in) 中指定数组大小来完成

  • 奖励:#define 您的数组大小,这样您就可以只在一个位置更新大小并让更改在您的代码中传播。

【讨论】:

    【解决方案2】:

    改为这样做。

    uint8 myArray_A[3][5];
    uint8 myArray_B[3][5];
    
    void doThings(uint8 in[][5])
    {
      in[0][0] = someValue_0
      in[0][1] = someValue_1
    }
    

    如果维度的大小不同,那么您需要以某种方式传递它,并进行自己的矩阵运算,坦率地说,这取决于机器,所以不是一个好主意:

    void doThings(uint8 * in, int dim1, int dim2)
    {
      in[0*dim2+0] = someValue_0
      in[0*dim2+1] = someValue_1
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-01
      • 2020-06-01
      • 2020-09-11
      • 2019-10-19
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 2023-04-05
      • 2021-07-27
      相关资源
      最近更新 更多