Therefore, the visualization of the address is called a "pointer". This means that it can be used to find a storage unit with an address.
For another example, if a person asks you to go to McDonald's to buy me an ice cream, then McDonald's is variable A, but now that person has written the address of McDonald's on a piece of paper for you, then this paper can be regarded as a pointer to McDonald's.
Extended data:
For example:
int p; //This is an ordinary integer variable. ?
int * p; //Start with p first, then combine with *, so it means that p is a pointer, and then combine with int, indicating that the content type pointed by the pointer is int. So p is a pointer that returns integer data. ?
int p[3]; //Starting from p, use [] to combine first, indicating that p is an array, and then use int to combine, indicating that the elements in the array are integers, so p is an array composed of integer data.
int * p[3]; //Start with p and combine with [] first, because its priority is higher than *, so p is an array, then combine with *, indicating that the elements in the array are pointer types, and then combine with int, indicating that the type of the content pointed by the pointer is an integer, so p is an array composed of pointers that return integer data. ?
int(* p)[3]; //Start with p and combine with *, indicating that p is a pointer and then use [] (this step can be ignored with "()", just to change the priority), indicating that the pointer points to an array, and then combine with int, indicating that the elements in the array are integers. So p is a pointer to an array of integer data. ?
int * * p; //Start with p and combine with * first, indicating that p is a pointer, then combine with *, indicating that the element pointed by the pointer is a pointer, and then combine with int, indicating that the element pointed by the pointer is integer data. Because the second-level pointer and higher-level pointer are rarely used in complex types, the later more complex types do not consider multi-level pointers, but only consider first-level pointers at most.
int p(int); //Starting from p, first combine () to explain that p is a function, then enter () to analyze that the function has an integer variable parameter, and then combine with external int to explain that the return value of the function is an integer data. ?
int(* p)(int); //Starting from p, first combine with pointer, indicating that p is a pointer, then combine with (), indicating that pointer points to a function, then combine with int in (), indicating that the function has an int parameter, and then combine with the outermost int, indicating that the return type of the function is an integer.
So p is a pointer to a function with integer parameters and the return type is integer. ?
int *(* p(int))[3]; //You can skip this type first. It is too complicated. Start with p, first combine with (), indicating that p is a function, then enter (), combine with int, indicating that the function has integer variable parameters, and then combine with the outside *, indicating that the function returns a pointer.
Then go to the outermost layer and combine with [] to indicate that the returned pointer points to an array. Then combine with * to indicate that the elements in the array are pointers, and then combine with int to indicate that the pointer points to integer data. So p is a function, its parameter is an integer data, and it returns a pointer variable, pointing to an array of integer pointer variables.
References:
Baidu encyclopedia-pointer