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