2015-12-02 261 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中,函数指针只需解除引用一次。

相关问题