首页 > 解决方案 > 如何在 Arduino 草图中获取多维数组的大小?

问题描述

我的 LED 矩阵有一大堆(约 10k)帧,我将它们放在我的 arduino 上,如下所示:

  static const uint8_t PROGMEM
  frames[][105] = {
      {0,0,0,0,5,14,14,9,0,0,0,0,251,0,0,
    0,0,0,3,255,255,255,255,252,42,2,0,0,0,0,
    0,0,0,0,8,86,255,255,255,255,62,62,58,37,0,
    0,0,0,0,0,1,12,31,82,252,252,39,32,2,0,
    0,0,0,0,0,0,0,0,0,0,255,250,24,0,0,
    0,0,0,0,0,0,0,0,0,0,255,253,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,1,253,0,0},
      {0,0,0,0,8,58,255,255,255,251,23,0,0,0,0,
    0,0,0,0,0,4,27,181,255,255,255,255,247,0,0,
    0,0,0,0,0,0,0,0,24,251,234,226,227,194,53,
    0,0,0,0,0,0,0,0,0,0,21,54,28,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
    };

在这种情况下,外部数组的长度为 2。为了节省我每次生成新帧时都更新一个常量值,有没有办法计算这个数组的长度?

标签: arduino

解决方案


sizeof(frames)返回整个数组的大小(以字节为单位)。

sizeof(frames[0])返回第一行的大小(与所有其他行完全相同)以字节为单位。

sizeof(frames[0][0])返回第一行的第一项的大小(与所有其他项完全相同)以字节为单位。

所以

sizeof(frames) / sizeof(frames[0])- 行数

sizeof(frames[0]) / sizeof(frames[0][0])- 列数(105)

您可以定义一个宏,如

#define array_length(x) (sizeof(x) / sizeof(x[0]))

并使用它:

array_length(frame)- 行数

array_length(frame[0])- 列数


推荐阅读