Есть как минимум два способа сделать это.
Первый
static int FunB(..., void *userdata_)
{
int *a = userdata_;
/* Here `a[0]` is 3, and `a[1]` is 45 */
...
}
int main()
{
int b[] = { 3, 45 };
funcA(..., FunB, b); /* Note: `b`, not `&b` */
}
Второй
static int FunB(..., void *userdata_)
{
int (*a)[2] = userdata_;
/* Here `(*a)[0]` is 3, and `(*a)[1]` is 45 */
...
}
int main()
{
int b[] = { 3, 45 };
funcA(..., FunB, &b); /* Note: `&b`, not `b` */
}
Выберите, какой вам нравится больше. Обратите внимание, что второй вариант специально предназначен для ситуаций, когда размер массива фиксирован и известен во время компиляции (в данном случае точно 2
). В таких ситуациях второй вариант на самом деле предпочтительнее.
Если размер массива не фиксирован, тогда вам нужно использовать первый вариант. И, конечно, вы должны как-то передать этот размер FunB
.
Обратите внимание, как массив передается в funcA
(как b
или как &b
) и как к нему обращаются в FunB
(как a[i]
или как (*a)[i]
) в обоих вариантах , Если вы не сделаете это правильно, код может скомпилироваться, но не будет работать.