函数指针数组的长度

时间:2013-03-13 19:10:04

标签: c

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

以下是否有效?

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

2 个答案:

答案 0 :(得分:2)

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

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

仅当a是实际数组时才会起作用,即声明为TYPE a[...]。如果a是从数组创建的TYPE指针,例如通过将数组传递给函数,则上面的宏将产生不正确的结果。

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

答案 1 :(得分:1)

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

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

如果执行sizeof(*apointer),它将返回单个元素(或数组中的第一个元素)的大小,因为再次,C中没有办法让sizeof知道指针指向数组或只是一个元素。