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

Ump*_*Gee 5 c arrays struct function-pointers

我正在尝试初始化一组结构.结构中包含函数指针,并定义如下:

typedef struct{
      char str[512];
      char *fptr;
} infosection;
Run Code Online (Sandbox Code Playgroud)

然后我尝试制作一个数组:

infosection section[] = {
      ("Software", *SoftwarePtr),
      ("Hardware", *HardwarePtr),
 }
Run Code Online (Sandbox Code Playgroud)

我使用一个简单的教程定义了函数指针.Function Software返回一个int

int (*SoftwarePtr)()=NULL;
SoftwarePtr = &Software;
Run Code Online (Sandbox Code Playgroud)

我的问题是我在编译时遇到的警告.

初始化从指针生成整数而不进行强制转换

警告引用section数组中的行.

所以我有两个疑问:

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

      infosection section[];
      section[0].str="software";
      section[0].fptr=SoftwarePtr;
    
    Run Code Online (Sandbox Code Playgroud)

只是为了澄清,我已经做了相当多的研究structs,array of structsfunction pointers.看起来3的组合似乎造成了麻烦.

Gri*_*han 7

我发现的一个错误,在函数指针的结构声明中是不正确的:

typedef struct{
      char str[512];
      int (*fptr)();  // not char* fptr
} infosection;
Run Code Online (Sandbox Code Playgroud)

宣言:

infosection section[] = {
      ("Software", *SoftwarePtr),
      ("Hardware", *HardwarePtr),
 }
Run Code Online (Sandbox Code Playgroud)

应该:

infosection section[] = {
      {"Software", SoftwarePtr},
      {"Hardware", HardwarePtr}
 }
Run Code Online (Sandbox Code Playgroud)

删除*.和替换内( ){ }.

:

infosection section[];
section[0].str="software"; // compiler error
section[0].fptr=SoftwarePtr;
Run Code Online (Sandbox Code Playgroud)

是不是你不能以这种方式分配字符串.你需要使用strcpy()如下;

strcpy(section[0].str, "software");
Run Code Online (Sandbox Code Playgroud)