1

有没有一种安全的方法来获取函数指针数组的长度?

下面的工作吗?

sizeof((uintptr_t)(*fp) / sizeof(uintptr_t)(*fp[0]))
4

2 回答 2

3

无论元素类型如何,数组长度的标准习惯用法是:

#define countof(a) (sizeof(a) / sizeof(*(a)))

只有当a它是一个实际的数组时才有效,即声明为TYPE a[...]. 如果a是从数组创建的指针TYPE,例如通过将数组传递给函数,上述宏将产生不正确的结果。

我怀疑您的代码是这种混乱的结果。它取消引用fp,只有当它是指向数组的指针时才是正确fp的,如果它是指向数组元素的指针则不正确。

于 2013-03-13T19:13:58.130 回答
1

不是动态分配的数组,也不是通过指向数组的指针(根据定义,它会排除动态分配的数组)。

sizeof(apointer)将返回指针的大小而不是它指向的缓冲区的大小。在 C 中没有办法sizeof知道指针指向一个数组或只是一个元素(实际上是一个 1 的数组)。

如果这样做sizeof(*apointer),它将返回单个元素(或数组中的第一个元素)的大小,因为在 C 中,sizeof 无法知道指针指向数组还是仅指向单个元素。

于 2013-03-13T19:14:41.797 回答