指向函数指针的指针 - 表达式必须是可修改的左值

时间:2015-12-02 13:48:15

标签: c pointers

我想在函数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)
{
   ...
}

2 个答案:

答案 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中,函数指针只需解除引用一次。