Существует метод, называемый «правилом справа налево», который может помочь вам расшифровать сложные объявления, подобные этим. Правило работает путем замены английских ключевых слов на атрибуты, которые появляются в объявлении. Затем, когда вы соедините ключевые слова, построенное предложение будет описывать объявление.
Вот атрибуты и ключевые слова, которые вы должны использовать:
- Когда вы видите атрибут "()" используйте ключевое слово "функция, которая возвращает"
- Когда вы видите атрибут «[n]», используйте ключевое слово «массив из n»
- Когда вы видите атрибут "*", используйте ключевое слово "указатель на"
Теперь вот «правило правого левого»:
- Начните с идентификатора.
- Найдите атрибут справа.
- Если ничего не найдено, посмотрите налево.
- Как только атрибут найден, подставьте его английское ключевое слово.
- Продолжайте замену вправо-влево, когда вы выходите.
- Остановитесь, когда достигнете типа данных в объявлении.
Вот несколько примеров:
int n[10];
Идентификатор n. Атрибут справа [10]
, поэтому используйте ключевое слово «массив из 10». Далее вы достигнете типа данных int
. Таким образом,
n - это «массив из 10 целых чисел».
int *n[10];
Идентификатор n. Атрибут справа [10]
, поэтому используйте ключевое слово «массив из 10». Посмотрите налево, и атрибут равен *
, поэтому используйте ключевое слово «указатель на». Там нет больше атрибутов. Осталось только тип данных int
. Соедините ключевые слова, чтобы получить:
n - это «массив из 10 указателей на целые числа».
int (*pf)();
Идентификатор pf. Там нет атрибута сразу справа от pf. Слева от pf находится *
. Таким образом, первое ключевое слово - «указатель на». Затем вернитесь вправо, и атрибут ()
. Это означает, что следующим ключевым словом является «функция, которая возвращает». Теперь вернитесь влево к типу данных int
. Соедините ключевые слова, чтобы получить:
pf - это «указатель на функцию, которая возвращает int»
int *(*pf)();
pf - это идентификатор. Там нет атрибутов справа от pf. Слева *
, поэтому первое ключевое слово - "указатель на". Справа - ()
, поэтому следующее ключевое слово - «функция, которая возвращает». Слева - *
, поэтому следующее ключевое слово - «указатель на». Затем перейдите к типу данных int
:
pf - это «указатель на функцию, которая возвращает указатель на int».
Этот следующий пример похож на предыдущий, но на этот раз есть некоторые аргументы для функции pf. Аргументы: int *x
и int *(*y)()
. Вы должны быть в состоянии описать каждый из этих аргументов на основе всего до сих пор. И как только вы это сделаете, вы сможете описать все это:
int *(*pf)(int *x, int *(*y)());
pf - указатель на функцию, которая возвращает указатель на int. пф принимает два аргумента. Первый аргумент x является указателем на int. Второй аргумент y - это указатель на функцию, которая возвращает указатель на int.