【发布时间】:2021-03-28 04:24:42
【问题描述】:
我声明了一个这样的结构:
typedef struct s_data {
char buff[2048];
int len;
void *func[10];
struct data *next;
} t_data;
在我的代码中,当传递 *data 时,我分配了一些函数(只给出一个,这样更容易理解)
void init_data(t_data *data)
{
data->len = 0;
data->func[0] = &myfirstfunctions;
//doing the same for 9 others
}
我的第一个函数是作为参数 *data 和一个 int。 然后,我尝试在另一个函数中使用这个函数,做
data->func[0](data, var);
我尝试了这个和其他一些涉及尝试寻址 (*func[0]) 的语法,但它们都不起作用。我从那里的其他更复杂的问题中了解到我不应该像这样存储我的函数,或者应该将它转换为另一个 typedef,但我并没有真正理解所有内容,因为我是编程新手。
【问题讨论】:
-
void *是一个无类型指针。编译器不知道指针真正指向什么,这意味着如果不强制转换为正确的类型,就无法取消引用它。更好的解决方案是使func成为一个正确类型的数组。函数类型的类型别名(使用typedef创建)会有所帮助。 -
感谢@Someprogrammerdude!根据您的回答,我只是尝试将我的 func 数组更改为 int 数组,因为我的所有函数都将返回一个 int。但是当我尝试分配它时:data->func[0] = &myfirstfunction;,我收到了错误分配的警告('int ' from 'int ()(t_data *, int)') .我想我从警告中了解到问题来自我的论点,但我错过了什么?谢谢你的时间,
标签: arrays c structure function-pointers