正在创建具有指向函数的指针数组的结构

Creating struct with array of pointer to function

本文关键字:函数 指针 数组 结构 创建      更新时间:2023-10-16

有人能帮我解决下面代码中显示的错误吗?

#include <iostream>
#include "FG.h"
struct pr { double (*fG[3]) (double, double, double, double*);};
int main()
{       

    double (*fG[3]) (double, double, double, double*);
    fG[0] = GX00;
    fG[1] = GX00;
    fG[2] = GX22;
    double prx[2] = {10, 1};
    struct pr params ={ fG };
    std::cout << params.fG[0]( 1 , 0.5 , 1, prx ) << std::endl;
    return 0;
}

编译:

$ g++ -c test.cpp 

test.cpp:在函数"int main()"中:test.cpp:15:25:error:必须使用大括号括起来的初始值设定项初始化数组

在C中不能从另一个数组初始化一个数组(就像数组赋值不起作用一样)。试试这个:

struct pr params = { { &GX00, &GX00, &GX22 } };

以下是使用自定义构造函数的另一种方法:http://ideone.com/blVBox

问题是,"读取"fG(就像在struct pr params ={ fG };中所做的那样)不会给您数组的副本,而是数组第一个地址的副本。这与以下情况相当:

char  buffer[200] = "Test";
char *p = buffer;

在这种情况下,p只存储缓冲区的第一个地址。另一方面,要初始化结构,需要告诉编译器每个元素应该存储什么。因此,结构的正确初始化是:

struct pr params ={ 
    { GX00, GX00, GX22 }
};

此外,我建议您键入函数签名,而不是一遍又一遍地复制它。它使代码可读性更强:

typedef double (*tCallback) (double, double, double, double*);
struct pr {
    tCallback fG[3];
}