C Pointers
C Pointers
As you know, every variable is a memory location and every memory location has its
address defined which can be accessed using ampersand & operator, which denotes an
address in memory. Consider the following example, which will print the address of the
variables defined:
#include <stdio.h>
int m ain ()
{
int var1;
char var2[10];
return 0;
}
When the above code is compiled and executed, it produces result something as follows:
So you understood what is memory address and how to access it, so base of the concept is
over. Now let us see what is a pointer.
type * var-name;
Here, type is the pointer's base type; it must be a valid C data type and var-name is the name
of the pointer variable. The asterisk * you used to declare a pointer is the same asterisk that you
use for multiplication. However, in this statement the asterisk is being used to designate a
variable as a pointer. Following are the valid pointer declaration:
The actual data type of the value of all pointers, whether integer, float, character, or otherwise,
is the same, a long hexadecimal number that represents a memory address. The only
difference between pointers of different data types is the data type of the variable or constant
that the pointer points to.
#include <stdio.h>
int m ain ()
{
int var = 20; /* actual variable declaration * /
int * ip; /* pointer variable declaration * /
return 0;
}
When the above code is compiled and executed, it produces result something as follows:
NULL Pointers in C
It is always a good practice to assign a NULL value to a pointer variable in case you do not
have exact address to be assigned. This is done at the time of variable declaration. A pointer
that is assigned NULL is called a null pointer.
The NULL pointer is a constant with a value of zero defined in several standard libraries.
Consider the following program:
#include <stdio.h>
int m ain ()
{
int * ptr = NULL;
return 0;
}
When the above code is compiled and executed, it produces the following result:
On most of the operating systems, programs are not permitted to access memory at address
0 because that memory is reserved by the operating system. However, the memory address 0
has special significance; it signals that the pointer is not intended to point to an accessible
memory location. But by convention, if a pointer contains the null zero value, it is assumed to
point to nothing.