正确获取sizeof()
我有几个字节数组和字节数组的数组。我想从最后一个数组(字节数组数组)中获取一个字节数组的大小。 sizeof()
在字节数组上工作良好,但是当我尝试使用字节数组索引数组时,它不起作用。正确获取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
的错误。
您可以使用:
byte (*(test[3]))[5]={&A, &B, &gamma};
static_assert(5 == sizeof(*test[0]), "unexpected size");
但使用std::vector
会更简单。
如果不同阵列的尺寸是不同的,必须提供一种方法来知道大小:
- (对于C-字符串作为
'\0'
)提供一个标记值 -
给长度/沿着指针大小,像:
std::pair<byte*, std::size_t> tests[] = { {A, sizeof(A)}, {B, sizeof(B)}, {gamma, sizeof(gamma)} };
从我知道的Arduino虽然它是C/C++现在使用vectors.This是我的第一个想法。所有字节数组的大小不是5有些是6有些是2等我可以跳过大小声明吗? – kyrpav 2014-09-03 10:12:15
@kyrpav:第一个解决方案不处理不同的大小,我编辑我的答案以提供替代解决方案。 – Jarod42 2014-09-03 12:13:46
@kyrpav请帮助您的微控制器的内存,并跟踪每个阵列的大小。最简单的事情就是 'byte * A = {0x01,0x02,0x22}; int length_of_A = 3'。这样你永远不会损坏内存.... – frarugi87 2014-09-12 21:06:12
你要跟踪的大小。或者使用为您提供的容器类型。 – juanchopanza 2014-09-03 09:55:27