Tha*_*raj 0 c struct pointers function
struct a
{
int (*ptr1)();
int (*ptr2)();
int data;
};
typedef struct
{
struct a x;
}all;
int fun1()
{
return 5;
};
int fun2()
{
return 9;
};
Run Code Online (Sandbox Code Playgroud)
我可以分配喜欢
all *mem = (all*)malloc(sizeof(all));
mem->x.ptr1 = fun1;
mem->x.ptr2 = fun2;
Run Code Online (Sandbox Code Playgroud)
有没有其他方法来分配这些函数指针?有可能像这样分配吗?
all *mem;
(void **)mem->ptr1[0] = fun1;
(void **)mem->ptr2[1] = fun2;
Run Code Online (Sandbox Code Playgroud)
不,这是不可能的(我假设你实际上意味着以下,因为你的代码没有多大意义)
((void **)&mem->ptr1)[0]=fun1;
((void **)&mem->ptr1)[1]=fun1;
Run Code Online (Sandbox Code Playgroud)
这在语法上是正确的,但引用了C标准:
结构对象中可能存在未命名的填充,但不是在其开头.
这意味着你无法保证((void **)&mem->ptr1)+1 == ((void **)&mem->ptr2).
你发表的声明
(void **)mem->ptr1[0] = fun1;
Run Code Online (Sandbox Code Playgroud)
实际意味着
(void **)((mem->ptr1)[0]) = fun1;
Run Code Online (Sandbox Code Playgroud)
它试图索引一个函数指针.
请注意,所有类似的引用mem->ptr1应该实际上是mem->x.ptr1根据您的定义.