如何为结构中的函数指针成员赋值

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)

jpa*_*cek 5

不,这是不可能的(我假设你实际上意味着以下,因为你的代码没有多大意义)

((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根据您的定义.