指向函数指针的指针 - 表达式必须是可修改的左值
Posted
技术标签:
【中文标题】指向函数指针的指针 - 表达式必须是可修改的左值【英文标题】:pointer to function pointer - expression must be a modifiable lvalue 【发布时间】:2015-12-02 13:48:14 【问题描述】:我想在函数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】:这个:
**ptrfuncptr=&DispFirmware;
应该是
*ptrfuncptr = DispFirmware;
此外,调用时不需要取消引用函数指针,函数的名称可以被认为是指向它的指针,因此普通调用就像通过指针一样工作。
【讨论】:
【参考方案2】:您的代码存在一些问题。这是固定版本:
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
中,函数指针只需要解引用一次。
【讨论】:
以上是关于指向函数指针的指针 - 表达式必须是可修改的左值的主要内容,如果未能解决你的问题,请参考以下文章