The declaration of a pointer variable in C, comprises the type of pointer followed by indirection operator (*) which is followed by an identifier for the pointer. The declaration is done as follows:
In case of pointers, the type of pointer variable is the same as the type of the variable for which the pointer is being declared. Thus, if the variable is int, the type of its pointer is also int. If the· type of variable is float, the type of its pointer is also float. The distinction between the declaration of a pointer and in declaration of a variable is the existence of asterisk (*) between the type and the name of pointer. The compiler on encountering the operator (*) after type makes out that the variable being declared is a pointer and not an ordinary variable. Consider the following examples:
int n; // declaration of a variable of type int.
int* ptr; // declaration of a pointer to a variable of type int.
The first line in the above code is the declaration of a variable of type int and the second line of code is the declaration of a pointer to a variable of type int. In the above declaration, the asterisk (*) is attached to int. We may as well write it with the asterisk attached to ptr or attached to none as shown below. All are considered to be equivalent.
The name or identifier for a pointer may be decided in the same manner as done for any other variable. However, to distinguish names for pointer variables from other variables, programmers, in general, prefer to attach p or P or ptr or PTR to the name of variable to obtain the name of its pointer. Many programmers simply use p, P, or ptr, etc., as names of pointers. In the above declaration, the pointer pt r is not initialized. Let n be an integer variable; if we want that ptr declared above should point to n we have to assign the address of n to ptr. The assignment is shown in Fig.
According to the above assignment, the pointer ptr points to value of n Similarly, if m is another integer variable and if we want that ptr should now point to m then we have to assign the address of m to ptr, as done on the left side of Fig. Also, declaration and assignment may be done in the same line. The declaration of another pointer ptrm to the same variable m is also shown in the figure.
According to the above declaration, the address of m is the value of ptr and ptr points to the value of m. Earlier when pt r was assigned &n, it pointed to the value of n. So, a pointer is a variable and the values that may be assigned to it are the addresses of the objects. At any instant of time, a pointer points to an object whose address is assigned to it. We may declare another pointer ptrm to the same variable m. The pt rm is also be assigned the value &m. Now, both the pointers ptr and ptrm point to value of m. There may be several pointers to the same variable. The values of all these pointers is same, i.e., the memory address where the value of variable is stored.
Pointers to floating point variables and to character variables may similarly be declared as given below. Let ptrf be the name of a pointer to float type variables and ptrc be the name of a pointer to a character variable. These are defined and illustrated in Fig.
The variables as well as pointers of same type may be declared and assigned values in the same line. An example of such a declaration is provided below. However, the names of pointers must have asterisk (*) on their left side, otherwise, they would be ordinary variables.
double A, B, *ptra = &A, *ptrb;
ptrb =&B; // assignment of pointer ptrb by &B
The declaration of variables A and B; pointers *ptra and *ptrb; and assignment to pointer *ptra is done in the first line of the code above. In the second line, assignment to ptrb is carried out. Also, note that names of pointers have asterisk (*) on their left side.