函数指针数组的长度

问题描述:

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

以下工作?无论元件类型的

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

你为什么投? – cnicutar 2013-03-13 19:11:00

+0

至少它不会像你打算的那样工作。密切关注你的括号。并请显示'fp'的声明。 – moooeeeep 2013-03-13 19:35:39

,对于阵列的长度的标准成语是:

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

如果a是一个实际的阵列,即,声明为TYPE a[...]这只会工作。如果a是从数组创建的指向TYPE的指针,例如通过将数组传递给函数,上述宏将产生不正确的结果。

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

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

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

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