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

时间:2017-07-22 08:37:08

标签: arrays function

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

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

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

2 个答案:

答案 0 :(得分:0)

改为做。

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
}

答案 1 :(得分:0)

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

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

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