2016-01-10 3 views
-2

А в чем разница междуЧто означает void * (* void) (void *)?

void*(*void)(void*) 

и

void*(*voi)(void*) 

и когда его использовать?

+1

Я не вижу разницы, кроме опечатки (voi) –

+0

У вас нет опечатки: 'voi' вместо 'void'? – arainone

+5

well 'void * (void) (void)' не компилируется, потому что он пытается объявить функцию, которая возвращает 'void *' named 'void', и вы не можете использовать ключевые слова этого языка в качестве имен. – PeterT

ответ

4

нуль void*(void)(void) не скомпилирован, так как он пытается объявить функцию, которая возвращает void * named void, и вы не можете использовать ключевые слова языка в качестве имен.

Вы также не можете объявить int named void (int void=5; не работает).

В настоящее время voi является действительным идентификатором, и вы можете назвать функцию voi.

Попытка получить то, что вы на самом деле задаете разницу между ними.

void(*name)(void); и void(name)(void); - это то, что один объявляет функцию, а другой объявляет указатель на функцию.
На самом деле скобки на втором примере ничего не делают. void(name)(void); - это то же самое, что и void name(void);.

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

В любом случае, я не уверен, что именно вы спрашиваете, поэтому вам лучше всего искать на сайте другие вопросы, касающиеся указателей на функции. Например, this one, что также объясняет, почему использование void(name)(void) может отличаться от void(name)().