Сложная декларация - PullRequest
       18

Сложная декларация

3 голосов
/ 17 августа 2011

Как мы интерпретируем следующую декларацию:

char (*(*f())[])();

Как разработать удобную технику для чтения таких сложных или даже более сложных объявлений в C. Если вы используете быстрый трюк, пожалуйста, поделитесь.

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Есть действительно не очень известный трюк.Представьте, что f - это имя переменной, а *, () и [] - операции, которые вы можете над ней выполнять.Используйте правила приоритета операторов C, чтобы убедиться, что:

f

может быть применено

f()

, а затем разыменовано

*f()

и затем подписано

(*f())[]

, а затем разыменовывается

*(*f())[]

, а затем применяется

(*(*f())[])()

, чтобы получить char

char (*(*f())[])()

, поэтому f являетсяфункция, возвращающая указатель на массив указателей на функции, возвращающие символ.

0 голосов
/ 17 августа 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...