将 fix 数组传递给函数(以修改它)

passing fix array to a function (to modify it)

提问人:Dr. Joe 提问时间:7/22/2017 更新时间:7/22/2017 访问量:26

问:

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

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);
}

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

Arrays 函数

评论

0赞 Garr Godfrey 7/22/2017
固定双维数组必须始终包含第一维的大小。你所拥有的将无法编译。
0赞 Garr Godfrey 7/22/2017
对不起,这是需要的第二个维度
0赞 pasbi 7/22/2017
语言是什么?看起来像 C/C++

答:

0赞 Garr Godfrey 7/22/2017 #1

请改为执行此操作。

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
}
0赞 immortal 7/22/2017 #2

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

但是,可以通过在函数声明中指定数组参数来修复此问题。 这可以通过定义数组类型或在参数中指定数组大小来完成typedef int[3][5] my_array_tvoid doThings(uint8[3][] in)

  • 奖励:您的数组大小,以便您只能在单个位置更新大小,并使更改在代码中传播。#define