我正在尝试初始化一个结构数组。结构中有函数指针并定义如下:
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
警告引用节数组中的行。
所以我有两个疑惑:
- 我是否将 */&/neither 误用为指针?我已经尝试了每一种的组合,但我似乎仍然收到相同的警告。我知道每一种的含义,只是不确定它们在这个特定实例中的应用方式.
我可以像这里一样在数组中声明
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/