это пустой указатель?Кастинг?что это делает? - PullRequest
1 голос
/ 08 декабря 2011

Я новичок в языке C и указателях, и меня смущает это объявление функции:

void someFunction(int (*)(const void *, const void *));

Может ли кто-нибудь объяснить с точки зрения непрофессионала, что это делает и как это работает?

Ответы [ 5 ]

3 голосов
/ 08 декабря 2011

Это прототип функции, которая принимает:

указатель на функцию, которая принимает const void* и const void* в качестве аргументов и возвращает int

в качестве аргумента и возвращает void.

2 голосов
/ 08 декабря 2011

Он объявляет функцию, которая принимает другую функцию в качестве аргумента и ничего не возвращает.Другая функция будет объявлена ​​как

int otherfunction( const void *, const void * );

, и вы вызовете somefunction () следующим образом:

somefunction( otherfunction );
0 голосов
/ 08 декабря 2011

Отметьте это очень полезно при работе со сложными объявлениями.

0 голосов
/ 08 декабря 2011

Это объявление функции, которая принимает указатель на функцию в качестве аргумента. В своей основной форме это выглядит так:

void someFunction(argument_type);

Где argument_type - int (*)(const void *, const void *), что можно описать как «указатель на функцию, которая принимает два аргумента const void * и возвращает int» то есть любая функция, которая имеет следующее объявление:

int foo(const void *, const void *);

Для иллюстрации на примере:

int foo_one(const void * x, const void * y) { ... }
int foo_two(const void * x, const void * y) { ... }

void someFunction(int (*)(const void *, const void *) function_ptr)
{
    const void * x = NULL;
    const void * y = NULL;
    int result;
    result = (*function_ptr)(x, y); // calls the function that was passed in
}

int main()
{
    someFunction(foo_one);
    someFunction(foo_two);
    return 0;
}
0 голосов
/ 08 декабря 2011

Это функция с одним параметром.Этот параметр является указателем на функцию, которая возвращает int и переводит эти два пустых указателя в постоянные параметры данных.

...