Смущение объявления указателя C - PullRequest
0 голосов
/ 02 марта 2019

В чем разница между этими двумя объявлениями в C?

  1. int (*p)(char (*a)[]);

  2. int *p(char (*a)[]);

1 Ответ

0 голосов
/ 02 марта 2019

Для int (*p)(char (*a)[]);:

  • (*p)(char (*a)[]) - это int.
  • Так что (*p) - это функция, возвращающая int и принимающая параметр типаchar (*a)[].(Подробнее о последнем ниже.)
  • Итак, *p - это та же функция.
  • Итак, p - указатель на эту функцию.
  • В char (*a)[], (*a)[] - это char.
  • Итак, (*a) - это массив char с неизвестным размером.
  • Так что *a - это тот же массив.
  • То есть a - это указатель на массив char с неизвестным размером.
  • Так что p - это указатель на функцию, возвращающую int, которая принимает параметр, который является указателем намассив char с неизвестным размером.

Для int *p(char (*a)[]);:

  • *p(char (*a)[]) является int.
  • Итак p(char (*a)[]) - это указатель на int.
  • Так что p - это функция, которая возвращает указатель на int и принимает параметр типа char (*a)[].
  • выше, мы знаем, что параметр является указателем на массив char неизвестного размера.
  • Так что p - это функция, которая возвращает указатель на int и принимает параметр, который является указателемв массив char с неизвестным размером.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...