【问题标题】:Function Pointer in Struct结构中的函数指针
【发布时间】:2013-09-06 17:40:41
【问题描述】:

如何在 Struct 中使用函数指针? 具体来说,给定以下示例,程序编译但在运行时崩溃:

在头文件中

 #ifndef __FUNCTION_IN_STRUCT_H_
 #define __FUNCTION_IN_STRUCT_H_


struct functionDaemon {
     int id;
     //double (*funcp); // function pointer
     double  (*fp)(double);      // Function pointer
 };

 // #define NULL 'V'

 #endif /* _FUNCTION_IN_STRUCT_H_ */

在C文件中:

#include <math.h>
#include <stdio.h>

#include "function_in_struct.h"

extern struct functionDaemon *ftnAgent;

void do_compute_sum (void) {

     void* agent;
    // struct functionDaemon *ftnAgent = (struct functionDaemon *) agent;
    struct functionDaemon *ftnAgent;

    double  sum;

    // Use 'sin()' as the pointed-to function
    ftnAgent->fp = sin;
    sum = compute_sum(ftnAgent->fp, 0.0, 1.0);
    printf("sum(sin): %f\n", sum);

}

请给我建议。

【问题讨论】:

  • 您使用的是reserved identifier
  • compute_sum 在哪里定义?你也没有为ftnAgent分配任何内存。

标签: c++ c pointers struct


【解决方案1】:

你快到了:

struct functionDaemon *ftnAgent;

double  sum;

// Use 'sin()' as the pointed-to function
ftnAgent->fp = sin;

您的ftnAgent 只是一个未初始化的指针。

struct functionDaemon ftnAgent;

double  sum;

// Use 'sin()' as the pointed-to function
ftnAgent.fp = sin;
sum = compute_sum(ftnAgent.fp, 0.0, 1.0);

这是一个工作示例:

#include <math.h>
#include <stdio.h>


struct functionDaemon {
     int id;
     //double (*funcp); // function pointer
     double  (*fp)(double);      // Function pointer
 };


int main()
{
        struct functionDaemon f;
        f.fp = sin;

        printf("%f\n", (f.fp)(10));

        return 0;
}

编辑

你有这个:

extern struct functionDaemon *ftnAgent;

我假设 ftnAgent 在其他地方被实例化。在这种情况下,您不需要在 do_compute_sum 中使用 struct functionDaemon *ftnAgent;,因为它会隐藏已声明的 ftnAgent 结构,因此您将访问错误的(未初始化的)变量。

【讨论】:

  • 基于extern struct functionDaemon *ftnAgent;,我假设 OP 试图在其他地方定义它,然后用局部变量隐藏它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-03
相关资源
最近更新 更多