gpt4 book ai didi

c++ - 结构中的函数指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:22:21 26 4
gpt4 key购买 nike

如何在 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);

}

请多多指教。

最佳答案

你快到了:

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 结构,因此您将访问错误的(未初始化的)变量。

关于c++ - 结构中的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18663521/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com