-`int const *`: A (variable) pointer to a constant integer
-`int * const`: A constant pointer to a (variable) integer
-`int * const *`: A pointer to a constant pointer to an integer
-`int const * *`: A pointer to a pointer to a constant integer
-`int const * const *`: A pointer to a constant pointer to a constant integer
## Void Pointers
Pointers normally have a void* type. Each pointer is usually casted to fit the data it represents. Hence, pointers have the same size regardless of the data it represents, and the size is equal to sizeof(void*).
This value is usually 4 bytes for 32-bit operating systems and 8 bytes for 64-bit operating systems.
## Arrays and Pointers
Pointers and arrays have many similar aspects. They both support pointer arithmetics but have one different aspect. First, the name of an array *decays* to a pointer that points to the first index `array[0]` of the array. The address value of a pointer can be changed, but the address value of an array cannot be changed, hence an array is `const`.
## Function Pointers
## Function Pointers
Function pointers are pointers that point to a function, not variables. This is because every component running in a program are actually all saved in a specific location in memory. Thus, locating that memory will allow the programmer to run the function. Function pointers are delcared as below.