2015-12-02 83 views
0

我想獲取函數Check_Commands中所需函數的地址,並將其放在指針fptr中,然後調用它。但是,試圖編譯這段代碼的時候,我得到以下信息:函數指針指針 - 表達式必須是可修改的左值

「錯誤[Pe137]:表達式必須修改的左值」

我這麼想嗎?

void main(void) 
{ 
    ... 

    void(*fptr)(CmdDataType); 

    Check_Commands(&fptr); 

    (*fptr)(&CmdData); 
} 


void Check_Commands(void (**ptrfuncptr)(CmdDataType)) 
{ 
    ... 

    **ptrfuncptr=&DispFirmware; 

    ... 
} 


void DispFirmware(CmdDataType *CmdData_ptr) 
{ 
    ... 
} 
+1

錯誤發生在哪一行? –

回答

2

此:

**ptrfuncptr=&DispFirmware; 

應該只是

*ptrfuncptr = DispFirmware; 

也沒有必要取消引用函數指針調用時,函數的名稱可以被看作是一個指針所以普通的調用就像通過指針一樣工作。

1

有幾個問題與您的代碼。下面是固定的版本:

void main(void) 
{ 
    CmdDataType CmdData; 

    void (*fptr)(CmdDataType *); 

    Check_Commands(&fptr); 

    (*fptr)(&CmdData); 
} 


void Check_Commands(void (**ptrfuncptr)(CmdDataType *)) 
{ 

    *ptrfuncptr=&DispFirmware; 

} 


void DispFirmware(CmdDataType *CmdData_ptr) { } 

fptr是一個指針,指向這需要一個CmdDataType指針作爲參數,所以需要加以固定的功能。

而在函數Check_Commands中,函數指針只需解除引用一次。

相關問題