当然你可以使用 void 指针数组,但是如果你想传递不同类型的值(尤其是类型长于 的值sizeof(void *)
),你就不能使用数组。对于这些,您几乎肯定希望将它们包装在一个结构中并将结构的地址作为数据参数传递。
例子:
struct my_struct *data = malloc(sizeof(*data));
data->field_one = value_one;
data->field_two = value_two; /* etc. */
g_signal_connect(save, "clicked", callback, data);
当然,不要忘记free(data)
在回调函数中(假设它是单次使用的)。
编辑:因为您想要一个带有 void ** 的示例,所以在这里(这很难看,我不建议您使用它——因为为原始类型分配单元素数组会浪费您的拍摄,或者因为投射指向 void * 的非指针是不好的做法...):
void **data = malloc(sizeof(data[0]) * n_elements);
type1 *element1_ptr = malloc(sizeof(first_item));
*element1_ptr = first_item;
data[0] = element1_ptr;
/* etc. */
释放他们:
int i;
for (i = 0; i < n_elements; i++)
free(data[i]);
free(data);