繁体   English   中英

初始化一个结构数组,其中包含函数指针C.

[英]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数组中的行。

所以我有两个疑问:

  1. 我是否误用* /&/两者都没有指针?我已经尝试了各自的组合,我似乎仍然得到相同的警告。我知道每个的含义,只是不确定它们如何适用于这个特定的实例。
  2. 我可以像在这里一样在数组中声明一个infosection struct的实例吗?我已经看到很多例子,人们在for loop声明它们array of struct ,但是我的最终产品需要在该数组中包含一长串结构。我想让我的代码portable ,以便人们可以以一种简单的列表式方式add structs (与要指向的函数对应的字符串)。 这是声明数组实例的唯一方法

      infosection section[]; section[0].str="software"; section[0].fptr=SoftwarePtr; 

为了澄清,我对structsstructs array of structsfunction 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM