2010-09-29 2 views
1

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

void foo_for_foo(void some_function(int, int))  <------ 
{ 
    int x = 5; 
    some_function(x, x); 
} 

, а также это один (на самом деле то же самое с небольшой разницей)

void foo_for_foo(void (*some_function)(int, int)) <------- 
{ 
    int x = 5; 
    some_function(x, x); 
} 

мой вопрос, делает это независимо от того, как я пишу это

void foo_for_foo(void some_function(int, int)) 

или

void foo_for_foo(void (*some_function)(int, int)) 

причина в обоих случаях я получаю тот же результат заранее спасибо

ответ

0

Обе версии такие же, поскольку вы по существу передаете указатель на функцию.

Хотя код верный, часто лучше использовать typedef для указателя функции, что улучшает читаемость кода и делает более сжатым, элегантный код.

Что-то вроде этого:

typedef void (*FooFunction)(int,int); 

void foo_for_foo (FooFunction fnc) 
{ 
    int x = 5; 
    fnc(x, x); 
} 
1

Да, обе версии означают то же самое: функции и указатели на функции преобразуются друг в друга (обоими способами). Смотрите также раздел 4 в этом списке странных поведения стандартных C:

http://www.eecs.berkeley.edu/~necula/cil/cil016.html#toc32

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

Смежные вопросы