函数指针数组的长度[重复]

Posted

技术标签:

【中文标题】函数指针数组的长度[重复]【英文标题】:length of an array of function pointers [duplicate] 【发布时间】:2013-03-01 22:05:01 【问题描述】:

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

以下方法有用吗?

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

【问题讨论】:

至少它不会像你想要的那样工作。留意你的括号。并请出示fp的声明。 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

以上是关于函数指针数组的长度[重复]的主要内容,如果未能解决你的问题,请参考以下文章

正在通过指针访问提供的数组的长度[重复]

数组去重 快慢指针

双指针总结

2627双指针问题

指针数组数组指针指针函数函数指针的简介

26. 删除有序数组中的重复项(先后指针)