2013-05-26 3 views
2

В C что функция указателя (void*) делать в:Функция указатель с (ничтожной *)

int (*fn) (void*) 

Если параметр ничего, то оно должно быть:

int (*fn)() 

Мое понимание void* является кусок памяти. void* mem средства mem указывая на кусок памяти. Но что такое (void*) без имени?

+3

«Если параметр ничего, то оно должно быть» Просто примечание : В языке C 'void foo()' не означает функцию без параметров; в отличие от этого, это означает функцию с неопределенным количеством аргументов. Таким образом, вызов, подобный этому, действителен полностью: 'foo (1," abc ", 2.3)'. Если вы хотите указать функцию с аргументом 0, вам нужно использовать 'void' между'() 'следующим образом:' void foo (void) '. – Jack

ответ

4

void * является анонимным указателем. Он указывает параметр указателя без указания конкретного типа данных.

1

Это означает, что fn является «любая функция, которая принимает блок памяти в качестве параметра, и возвращает Int»

6

Этот указатель объявление функции не требует от вас, чтобы дать void* имя. Для определения списка аргументов требуется только тип.

Это подобно тому, как:

void my_function(int x); 

так же действует, как

void my_function(int); 
+1

Кроме того, имя параметра, используемое в прототипе функции, не должно совпадать с именем параметра, используемым в определении функции. Вы можете иметь «extern char * strcpy (char * target, const char * source);» и написать 'char * strcpy (char * dst, const char * src) {while ((* dst ++ = * srC++)! = '\ 0 '); } 'как реализация. –

2

Неназванный параметр не то же самое, без каких-либо параметров. Объявление:

int (*fn)(void*); 

просто заявляет, что fn является функцией указатель, который принимает void* аргумент. Имя параметра несущественно (и имеет смысл только в реализации , где это имя локальной переменной).

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

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