POINTERS IN C-LANGUAGE
Published: 2021-05-11 14:02:29

                           POINTERS IN C

•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.
 
•A pointer is a variable whose value is the address of another variable, i.e., direct address of the memory location. Like any variable or constant, you must declare a pointer before using it to store any variable address.

•The general form of a pointer variable declaration is:
    type *var-name;
    
Here,
   -- type is the pointer's base type (it must be a valid C 
      datatype).
   -- var-name is the name of the pointer variable.
   -- * used to declare a pointer.

•Some of the valid pointer declarations are as follows −
    int    *ip;          /* pointer to an integer */
    double *dp;    /* pointer to a double */
    float  *fp;        /* pointer to a float */
    char   *ch        /* pointer to a character */

•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.

USAGE OF POINTERS:

(a) We define a pointer variable.
(b) Assign the address of a variable to a pointer.
(c) Finally access the value at the address available in the pointer variable.
•This is done by using unary operator * that returns the value of the variable located at the address specified by its operand.
•Example:
   #include <stdio.h>
   int main () 
   {
     int  var = 20;   /* actual variable declaration */
     int  *ip;        /* pointer variable declaration */
     ip = &var;  /* store address of var in pointer variable*/
     printf("Address of var variable: %x\n", &var  );
        /* address stored in pointer variable */
     printf("Address stored in ip variable: %x\n", ip );
     /* access the value using the pointer */
     printf("Value of *ip variable: %d\n", *ip );
     return 0;
   }

•When the above code is compiled and executed, it produces the following result −
   --  Address of var variable: bffd8b3c
   -- Address stored in ip variable: bffd8b3c
   -- Value of *ip variable: 20

NULL POINTERS

•It is always a good practice to assign a NULL value to a pointer variable in case you do not have an 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 −

•EXAMPLE
    #include <stdio.h>
    int main () 
    {
      int  *ptr = NULL;
      printf("The value of ptr is : %x\n", ptr  );
      return 0;
    }

•When the above code is compiled and executed, it produces the following result −

  --The value of ptr is 0

  --In 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.
  --To check for a null pointer, you can use an 'if' statement as 
    follows −

        if(ptr)     /* succeeds if p is not null */
        if(!ptr)    /* succeeds if p is null */