我定义了一些修复数组,我需要用一个通用函数编写:
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);
}
这是这样做的吗?它会起作用吗?
答案 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
您的数组大小,以便您只能在一个位置更新大小,并让更改在您的代码中传播。