Как typedef работает с указателями на функции

Я думаю, что, возможно, страдаю ужасной болезнью "случайного программиста", по крайней мере, когда дело доходит до определений типов и указателей функций. Итак, я экспериментировал со всевозможными комбинациями, включающими их, чтобы анализировать результаты на основе всех выходных данных, которые я получаю.

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

Я надеюсь, что вы, ребята, поможете мне разобраться в этой неразберихе.

Первый пример кода

typedef void (print)(void);
void do_something (void) { printf("Hello World\n"); }

print *pr;
pr = &do_something;
pr(); // Hello World

Второй пример кода

typedef void (print)(void);
void do_something (void) { printf("Hello World\n"); }

print *pr;
pr = do_something;
pr(); // Hello World

Как работают оба приведенных выше примера кода, это как если бы '&' не влияло на имя функции

третий пример кода

typedef void (print)(void);
void do_something (void) { printf("Hello World\n"); }

print pr;
pr = do_something; // compile error
pr = &do_something; // compile error
pr();

Я надеялся, что один из вышеупомянутые задания работать здесь но блин! Я действительно не понимаю указатели на функции (и, возможно, typedef тоже).

10
задан iammilind 20 February 2012 в 07:35
поделиться