C 语言中的多维数组(矩阵)及其处理方法

multidimensional arrays (matrixes) in C and how to handle them

提问人:Dominykas 提问时间:8/1/2023 最后编辑:πάντα ῥεῖDominykas 更新时间:8/1/2023 访问量:64

问:

我正在为加速度计板创建一个 C 代码,以用轴数据填充缓冲区。我有两个不同的加速度计,提供 X、Y 和 Z 轴数据,所以有 6 个不同的数据。我想将所有这些数据保存在数组中,但是有 6 个不同的数组不是很好的解决方案,所以我正在考虑使用 3 个多维数组:2 行,32 个冒号。问题是我真的不知道如何处理它们,因为我需要将这些缓冲区传递给一个函数作为引用:
bool run_detect_movement (int16_t *X_buffer, int16_t *Y_buffer, int16_t *Z_buffer)

这里没什么大不了的,但是在这个函数中,事情变得有点棘手,我需要将第一行传递给一个函数,将第二行传递给另一个函数,以便将两个不同的加速度计数据保存在一个缓冲区中。

void Read_FIFO_packet_16_IIM (int16_t *X_buffer, int16_t *Y_buffer, int16_t *Z_buffer)

void Read_FIFO_packet_8_LIS (int16_t *X_buffer, int16_t *Y_buffer, int16_t *Z_buffer)

所以我真的不确定该怎么做。下面是简化的 main.c 示例:

in16_t x_buffer_arrays[2][32] = {0};
in16_t y_buffer_arrays[2][32] = {0};
in16_t z_buffer_arrays[2][32] = {0};

int main()
{
    run_detect_movement (x_buffer_arrays, y_buffer_arrays, z_buffer_arrays);
    return 0;
}

这是 accelerometer.h 文件内容

bool   run_detect_movement (int16_t *X_buffer, int16_t *Y_buffer, int16_t *Z_buffer);
void   Read_FIFO_packet_8_LIS (int16_t *X_buffer, int16_t *Y_buffer, int16_t *Z_buffer);
void   Read_FIFO_packet_16_IIM (int16_t *X_buffer, int16_t *Y_buffer, int16_t *Z_buffer);

下面是 accelerometer.c 文件:

bool run_detect_movement (int16_t *X_buffer, int16_t *Y_buffer, int16_t *Z_buffer) {
    /*
        Do some stuff here
    */
    Read_FIFO_packet_16_IIM(X_buffer, Y_buffer, Z_buffer);
    Read_FIFO_packet_8_LIS(X_buffer, Y_buffer, Z_buffer);
    
}

是否可以将多维数组作为指向函数的指针传递,但使用特定的冒号或行?我在想类似的事情:

&(X_buffer[1][])

另一个问题是这些阵列是如何填满的?如果我要将多维数组传递给处理常规数组的函数,它会填充缓冲区还是会出现错误?

数组 C 多维数组

评论

1赞 Barmar 8/1/2023
使用结构数组,而不是多维数组。
0赞 Dominykas 8/1/2023
好主意,我现在会用它
2赞 Eric Postpischil 8/1/2023
的第二行(索引为 1)的地址是 ,而不是 。但是,的类型是一个指针,一个数组 32 。要将地址传递给需要 的例程,您需要第二行的第一个元素的地址,即 。而且,由于数组会自动转换为指向其第一个元素的指针,因此可以使用 ,它名义上是第一行的数组,但将转换为指向其第一个元素的指针。X_buffer&X_buffer[1]&(X_buffer[1][])&X_buffer[1]int16_tint16_t *&X_buffer[1][0]X_buffer[1]
0赞 Mikael Öhman 8/1/2023
为什么选择 c++ 标签?
0赞 Dominykas 8/1/2023
项目是用 C 和 C++ 编写的,所以也许用 C++ 处理这些数组更容易,我从来没有用过它们,如果用 C++ 改编解决方案也不会有问题。

答: 暂无答案