2013-03-13 82 views
0

有沒有一種安全的方法來獲取函數指針數組的長度?函數指針數組的長度

以下工作?無論元件類型的

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

回答

2

,對於陣列的長度的標準成語是:

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

如果a是一個實際的陣列,即,聲明爲TYPE a[...]這隻會工作。如果a是從數組創建的指向TYPE的指針,例如通過將數組傳遞給函數,上述宏將產生不正確的結果。

我懷疑你的代碼是這種混淆的結果。它取消fp,這隻有在fp是一個指向數組的指針時纔是正確的,而不是指向數組元素的指針。

1

不是動態分配的數組,也不是通過指向數組的指針(根據定義排除動態分配的數組)。

sizeof(apointer)將返回指針的大小而不是它指向的緩衝區的大小。在C中,sizeof沒有辦法知道指針指向一個數組或者只是一個單獨的元素(實際上是一個1的數組)。

如果你這樣做sizeof(*apointer)它將返回單個元素(或數組中的第一個元素)的大小,因爲再次,C中沒有辦法讓sizeof知道指針指向一個數組或單個指針元件。