我有一个函数,它接收指向不同数组的指针,如下所示:
unsigned char *arr[] = {0x34, 0x10, 0x3f, 0x00, 0x00 }
我想知道我的函数得到的每个数组中有多少个元素(字节)。例如,我需要一种方法来发现这个数组有5个字节。我把它传递给一个函数来打印数组的值。 Sizeof(arr)没有给我正确的结果。
答案 0 :(得分:4)
除非你使用像“数组是空终止的”这样的约定(比如名义上的C字符串),否则你无法在运行时确定数组的大小。你所拥有的只是一个指针。
答案 1 :(得分:2)
这是C.而在C中这不存在。你必须记住/存储元素的数量。
答案 2 :(得分:0)
sizeof(arr)/sizeof(unsigned char*)
您可以轻松地将其宏观化为
#define ARRAY_LENGTH(_array_) (sizeof(_array_) / sizeof(_array_[0])
顺便说一下,只有在与数组相同的范围内使用它时才会有效。如果将数组传递给函数(并且数组降级为指针),则无效。如果将数组传递给函数,则需要传递数字元素,并可能传递每个元素的大小。