【问题标题】: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)
{
   ...
}

【问题讨论】:

  • 错误出现在哪一行?

标签: c pointers


【解决方案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中,函数指针只需要解引用一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多