Overview In many cases, especially when reading the code, the understanding of the C language declaration becomes very important, and the concurrent concise of the C language itself also makes the statement of C language often feel very confused. Here I use an article to focus on this problem. Question: The declaration and function has a program stored on a period of starting address 0, if we want to call this program, how do you do it? The answer answer is (* (void (*)) 0) (). It is really a big, well, let us know, from two different ways to analyze this problem in detail. Answer analysis: From the end to the head, first, the most basic function declaration: void function (paramlist); the most basic function call: function (paramlist); In view of the function in the problem, the function call can be simplified into function (); second, According to the problem description, you can know that 0 is the entry address of this function, that is, 0 is a function of a function. The function declaration form using the function pointer is: void (* pfunction) (), the corresponding call form is: (* pfunction) (), the function call in the problem can be written: (* 0) (). Third, everyone knows that the function pointer variable cannot be a constant, so 0 in the above formula must be converted into a function pointer. Let's take a look at the function of using the function pointer: such as a void (* pfunction), what is the prototype of the function pointer variable? This problem is very simple, the PFunction function pointer is (void (*)), that is, the variable name is removed, and the whole, the whole () number. Therefore, the 0 force converted to a return value to a Void, the parameter is empty, the pointer is as follows: (Void (*) ()). OK, combined 2) and 3) analysis, the result is: (* (*)) 0) (). Answer Analysis: The answer from the head to tail (Void (*)) is a function pointer that is a return value of Void and the parameter is empty. (Void (*) ()) 0, convert 0 into a returned value of the function pointer, the parameter is empty, the pointer points to 0.1 * (void (*)) 0, front plus * representation The whole is a name of a function that returns value Void (* (void (*) ()) 0) (), of course, is a function. We can use the typedef clear statement as follows: typedef void (* pfun) (); this function becomes (* (pfun) 0) (); problem: analysis of the three declarations to analyze the declaration, the most fundamental method is also a ratio replacement Law, from those of the most basic statements, simplify, so that it is understood that the following methods are described below by analyzing three examples. # 1: int * (* a [5]) (int, char *); first see the identifier name a, "[]" priority is greater than "*", A and "[5]" first combined. So A is an array. This array has 5 elements. Each element is a pointer, pointer pointing "(int, char *)", which is obvious, pointing to a function, this function parameter is "int, char * ", Return value is" int * ".