我想在函数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)
{
...
}
答案 0 :(得分:2)
此:
**ptrfuncptr=&DispFirmware;
应该只是
*ptrfuncptr = DispFirmware;
此外,在调用时不需要取消引用函数指针,函数的名称可以被认为是指向它的指针,因此普通调用就像通过指针那样工作。
答案 1 :(得分: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
中,函数指针只需解除引用一次。