正确获取sizeof()

时间:2014-09-03 09:53:44

标签: c++ arduino

我有几个字节数组和一个字节数组的数组。我想从最后一个数组(字节数组的数组)中获取字节数组的大小。 sizeof()在字节数组上运行良好,但在我尝试使用字节数组索引数组时却不行。

byte A[]={B01111110,B10001000,B10001000,B10001000,B01111110};
byte B[]={B11111110,B10010010,B10010010,B10010010,B01101100};
byte gamma[]={B11111110,B10000000,B10000000,B10000000,B10000000};

byte *test[]={A,B,gamma}

Serial.println(sizeof(gamma));
Serial.println(sizeof(test[2]));

第一个串行打印给出5正确,第二个给出2(可能是指针的大小)。

如何获得正确的结果,因为我想在for循环中使用test[i]

我知道我应该将*test[]声明为test[][],以便不获取指针的大小,但是我错误地将byte*分配给byte

1 个答案:

答案 0 :(得分:1)

您可以使用:

byte (*(test[3]))[5]={&A, &B, &gamma};

static_assert(5 == sizeof(*test[0]), "unexpected size");

但使用std::vector会更简单。

如果不同阵列的大小不同,您必须提供一种了解大小的方法:

  • 提供标记值(C-string为'\0'
  • 沿指针给出长度/大小,如:

    std::pair<byte*, std::size_t> tests[] = {
        {A, sizeof(A)},
        {B, sizeof(B)},
        {gamma, sizeof(gamma)}
    };