Объясните разницу в этих объявлениях указателя функции - PullRequest
3 голосов
/ 09 ноября 2011

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

  1. void (*p) (void *a[], int n)

  2. void *(*p[]) (void *a, int n)

Ответы [ 3 ]

6 голосов
/ 09 ноября 2011
  1. void (*p) (void *a[], int n) определяет указатель на функцию, которая принимает массив void* и int в качестве параметра

  2. void *(*p[]) (void *a, int n) определяет массив указателей на функции, которые возвращают void* и принимают void* и int в качестве параметра .

5 голосов
/ 09 ноября 2011

Не являются объявлениями функций, поэтому объяснять нечего.

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

Я также должен предложить удобную программу cdecl (или ее онлайн-воплощение s);возможно, вы захотите сделать это самостоятельно, прежде чем кто-то покажет ответ для вас?

(Вам нужно ввести void *(*p[]) (void *, int) на веб-сайте; т.е. без идентификаторов для аргументов функции.)

0 голосов
/ 09 ноября 2011

РЕДАКТИРОВАТЬ: Неважно, я неправильно прочитал декларации. К сожалению.

Дело в том, что вы объявляете функциональные указатели, а не функции, как уже указывали люди.

...