我一直在嘗試將函數指針數組傳遞給函數。一旦進入該函數,我需要一個指向該函數指針數組的指針,但是我一直收到錯誤。當它不是函數參數時,我可以做到這一點。在功能參數列表無法「指向」傳遞函數指針數組C
void (*(*PointerToFuncPtrArray)[2])(unsigned char data[], unsigned char length);
void (*FuncPtr[2])(unsigned char data[], unsigned char length) = {
func1,
func2,
}
void NotArguement(void) // attempt to point to without passing as parameter
{
PointerToFuncPtrArray = &FuncP; // this works
}
// attempt to pass as argument
void AsArguement((void (*ptr[])(unsigned char data[], unsigned char length))
{
PointerToFuncPtrArray = &ptr; // This throws error
}
這將引發...
Error 1 error C2440: '=' : cannot convert from 'void (__cdecl **[])(unsigned char [],unsigned char)' to 'void (__cdecl *(*)[2])(unsigned char [],unsigned char)'
錯誤消息看起來相當清楚! 'PointerToFuncPtrArray'具有明確的大小信息;你正試圖給它分配一個不完整的類型(即它缺少大小信息)。 –
除了類型轉換問題之外,您還在'AsArguement'參數聲明中使'()'失衡。應該只有一個'(''在'AsArguement'之後'。實際上,這通常是編譯器會首先報告的錯誤。我想知道你是如何忽略它的。是否真的要編譯的代碼? – AnT