Not to mention how common typedef is, the most common is typedef struct. So the powerful type definition character typedef can also be used to define functions. Do you know? The following accurate code can be used to explain the problem: typedef int (* MYFunc) (int x, int y); // MYFunc: int * Function (int x, int y) if the new name of the type pointer is too complex, we will temporarily throw the form parameter list, that is, the typedef int (* MYFunc), then MYFunc is actually the int type pointer connected to the parameter list, let's continue: int add (int x, int y); MYFunc pMYFunc; pMYFunc = add; pMYFunc (5, 6); // The result is hard to understand, right? It doesn't matter. You can use such an incomplete method to put it down a little: You need to understand pMYFunc = add; In this sentence, we should first: MYFunc = add; // right? Then: * MYFunc = * add; eventually: int = * add // is that a bit interesting? If we do this: pMYFunc = & add; // It works. In fact, this is the original sentence because p = fun; (implicit address) it works the same as p = & fun (explicit address fetch). You can verify it by programming.