[英]Function Pointer in Struct
如何在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
已在其他地方實例化。 在這種情況下,您不需要struct functionDaemon *ftnAgent;
在do_compute_sum
內部,因為它將隱藏已經聲明的ftnAgent
結構,因此您將訪問錯誤的(未初始化)變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.