[英]initialize an array of structs with function pointers in them C
我正在尝试初始化一组结构。 结构中包含函数指针,并定义如下:
typedef struct{
char str[512];
char *fptr;
} infosection;
然后我尝试制作一个数组:
infosection section[] = {
("Software", *SoftwarePtr),
("Hardware", *HardwarePtr),
}
我使用一个简单的教程定义了函数指针。 Function Software返回一个int
int (*SoftwarePtr)()=NULL;
SoftwarePtr = &Software;
我的问题是我在编译时遇到的警告。
初始化从指针生成整数而不进行强制转换
警告引用section数组中的行。
所以我有两个疑问:
我可以像在这里一样在数组中声明一个infosection struct
的实例吗?我已经看到很多例子,人们在for loop
声明它们array of struct
,但是我的最终产品需要在该数组中包含一长串结构。我想让我的代码portable
,以便人们可以以一种简单的列表式方式add structs
(与要指向的函数对应的字符串)。 这是声明数组实例的唯一方法
infosection section[]; section[0].str="software"; section[0].fptr=SoftwarePtr;
为了澄清,我对structs
, structs
array of structs
和function pointers
做了大量研究。 看起来3的组合似乎造成了麻烦。
一
我发现的一个错误,在函数指针的结构声明中是不正确的:
typedef struct{
char str[512];
int (*fptr)(); // not char* fptr
} infosection;
二
宣言:
infosection section[] = {
("Software", *SoftwarePtr),
("Hardware", *HardwarePtr),
}
应该:
infosection section[] = {
{"Software", SoftwarePtr},
{"Hardware", HardwarePtr}
}
删除*
。 并用{
}
替换inner (
)
。
三 :
infosection section[];
section[0].str="software"; // compiler error
section[0].fptr=SoftwarePtr;
是不是你不能以这种方式分配字符串。 你需要使用strcpy()
如下;
strcpy(section[0].str, "software");
struct成员当前是char *,更改为函数签名的正确指针类型。
typedef struct{
char str[512];
int (*fptr)();
} infosection;
*取消引用指针,将* foo读为“foo指向的内容”。 您希望将struct成员设置为实际指针,也可以使用bracets而不是paranthesis。
infosection section[] = {
{"Software", SoftwarePtr},
{"Hardware", HardwarePtr}
}
已经有一段时间了,因为我正在玩指针,但也许一个构造函数会有帮助吗?
struct infosection{
char str[512];
char *fptr;
infosection(char* strN, char* fptrN): str(strN), fptr(fptrN) {}
};
infosection[] isxn = { new infosection(&str1,fptr1),
new infosection(&str2,fptr2)},
... };
我的道歉... c停止和c ++开始在我的脑海中变得模糊,我已经看到c的解决方法看起来像这样(但不完全是,我确定一些指针的东西混淆但这是想法)
struct infosection{
char str[512];
char *fptr;
};
infosection* myIS (char *strN, char *fptrN) {
infosection i = new infosection();
i.str = &strN;
i.fptr = fptrN;
return *i;
}
//infosection* newInfoSection = myIS(myStrPtr,myFptr);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.