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

标签 c arrays struct function-pointers

我正在尝试初始化一个结构数组。结构中有函数指针并定义如下:

typedef struct{
      char str[512];
      char *fptr;
} infosection;

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

infosection section[] = {
      ("Software", *SoftwarePtr),
      ("Hardware", *HardwarePtr),
 }

我使用一个简单的教程定义了函数指针。 函数软件返回一个 int

int (*SoftwarePtr)()=NULL;
SoftwarePtr = &Software;

我的问题是关于我在编译时收到的警告。

Initialization makes integer from pointer without a cast

警告引用节数组中的行。

所以我有两个疑惑:

  1. 我是否将 */&/neither 误用为指针?我已经尝试了每一种的组合,但我似乎仍然收到相同的警告。我知道每一种的含义,只是不确定它们在这个特定实例中的应用方式.
  2. 我可以像这里一样在数组中声明 infosection struct 的实例吗?我见过许多示例,人们在其中声明他们的 array of struct一个 for 循环, 然而,我的最终产品需要在该数组中包含一长串结构。我想让我的代码可移植,这样人们就可以添加结构(与功能指向)以一种简单的类似列表的方式,如所见。 这是声明数组实例的唯一方法吗

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

澄清一下,我对结构结构数组函数指针 进行了大量研究。似乎这三者的组合正在引起麻烦。

最佳答案

一个

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

typedef struct{
      char str[512];
      int (*fptr)();  // not char* fptr
} infosection;

两个

声明:

infosection section[] = {
      ("Software", *SoftwarePtr),
      ("Hardware", *HardwarePtr),
 }

应该是:

infosection section[] = {
      {"Software", SoftwarePtr},
      {"Hardware", HardwarePtr}
 }

删除*。并将内部 ( ) 替换为 { }

:

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

你不能以这种方式分配字符串是错误的。您需要按如下方式使用 strcpy()

strcpy(section[0].str, "software");

关于c - 初始化一个结构数组,其中包含函数指针 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17887888/

相关文章:

java - 为什么没有 java.lang.Array 类?如果java数组是一个Object,它不应该扩展Object吗?

c - 为什么我在 Xcode 上收到以下代码的 (lldb) 运行时错误?

javascript - 在我的数组中选择 2 个随机值

c - const struct pointer 是否保证内存损坏/崩溃问题的安全性?

c - 乱序执行——它能绕过控制语句吗?

c - 什么是 vector 数组?

c - Domino 程序问题

c - Haskell FFi 与 c2hs : Better out-marshalling of structs

C++ vector 和结构指针

c - 如何在 C 中测试 CLONE_VM、CLONE_FS 和 CLONE_IO 的效果?