【问题标题】:Function Pointer present inside a structure in C函数指针存在于 C 中的结构中
【发布时间】:2021-02-27 07:16:14
【问题描述】:

我正在研究通过函数指针运行函数的问题,函数指针是结构的变量。我尝试制作一个小代码,但我无法构建它。 我得到的错误如下: 请查看下面的代码。 main 函数中的第一条语句是错误的原因。 我是 C 的新手。谢谢你的帮助。

#include <stdio.h>
#include <stdlib.h>
#include<stdint.h>

typedef int16_t (*reset_start_f)(void);        //typedef used for function Pointer

int ThermMgrSvc_Reset(void)
{
    int retVal;
    retVal=5;
    return retVal;
}



typedef struct
{

    reset_start_f reset;   // function pointer

}module_function_t;





static const module_function_t MODULE_TABLE[]=
{
    {(reset_start_f)ThermMgrSvc_Reset},
};


int main()
{
    int x2= MODULE_TABLE[0].(*reset)();           // This statement causing Error
    printf("x2= %d\n",x2);


    return 0;
}

【问题讨论】:

  • 如何你的代码“失败”了?
  • 我无法构建它。
  • 为什么?你得到什么错误?请edit您的问题包括完整和完整的错误输出复制粘贴为文本。
  • 我已经编辑了这个问题。请审查它。我期望在执行代码后,打印语句应该打印 5。
  • 如果int16_t 不是int 的类型定义,这会导致未定义的行为。函数调用表达式的类型必须与函数定义的类型相匹配

标签: c pointers structure


【解决方案1】:

此语法无效:

int x2= MODULE_TABLE[0].(*reset)();

因为结构访问运算符. 必须紧跟字段名称。解引用运算符需要在整个子表达式之前:

int x2= (*MODULE_TABLE[0].reset)();

或者,由于函数指针在调用时被隐式取消引用,您可以完全删除*:

int x2= MODULE_TABLE[0].reset();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 2021-01-26
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多