提问人:Dominykas 提问时间:8/1/2023 最后编辑:πάντα ῥεῖDominykas 更新时间:8/1/2023 访问量:64
C 语言中的多维数组(矩阵)及其处理方法
multidimensional arrays (matrixes) in C and how to handle them
问:
我正在为加速度计板创建一个 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][])
另一个问题是这些阵列是如何填满的?如果我要将多维数组传递给处理常规数组的函数,它会填充缓冲区还是会出现错误?
答: 暂无答案
评论
X_buffer
&X_buffer[1]
&(X_buffer[1][])
&X_buffer[1]
int16_t
int16_t *
&X_buffer[1][0]
X_buffer[1]