the pointer in C language is a variable, it is also known as locator or indicator that points to an address of a value.

Advantage of pointer

1) Pointer reduces the code and improves the performance , it is used to retrieving strings, trees etc. and used with arrays, structures and functions.
2) We can return multiple values from function using pointer.
3) It makes you able to access any memory location in the computer's memory.

Usage of pointer

There are many usage of pointers in c language.

Dynamic memory allocation

we can dynamically allocate memory using malloc() and calloc() functions where pointer is used.

Arrays, Functions and Structures

Pointers in c language are widely used in arrays, functions and structures. It reduces the code and improves the performance.

Symbols used in pointer

& (ampersand sign)address of operatordetermines the address of a variable.
* (asterisk sign)indirection operatoraccesses the value at the address.

Address Of Operator

The address of operator '&' returns the address of a variable. But, we need to use %u to display the address of a variable.
#include <stdio.h>   
void main() {      
int number=40;          
printf("value of number is %d, address of number is %u",number,&number);  
value of number is 40,  address of number is bbb5

Declaring a pointer

The pointer in c language can be declared using * (asterisk symbol).
int *a; //pointer to int
char *c; //pointer to char

Pointer example

An example of using pointers printing the address and value is given.

you can see in the above figure, pointer variable stores the address of number variable i.e. bbb5. The value of number variable is 40. But the address of pointer variable p is ccc5.
By the help of * (indirection operator), we can print the value of pointer variable p.

see the pointer example as explained for above figure.
#include <stdio.h>  
void main() {      
int number = 40;  
int *p;      
p=&number;  //stores the address of number variable  
printf("Address of number variable is %x \n",&number);  
printf("Address pointed by variable p is %x \n",p);  
printf("Address of pointer variable p is %x \n",&p);  
printf("Value of p variable is %d \n",*p);  
Address of number variable is bbb5
Address pointed by variable p is bbb5
Address of pointer variable p is ccc5
Value of p variable is 40

NULL Pointer

A pointer that is not assigned any value but NULL is known as NULL pointer. If you don't have any address to be specified in the pointer at the time of declaration, you can assign NULL value. It will a better approach.
int *p = NULL;
In most the libraries, the value of pointer is 0 (zero).

Program to swap 2 numbers without using 3rd variable

#include <stdio.h>  
void main(){  
int x=20,y=30,*p1 = &x,*p2 = &y;  
printf("Before swap: *p1=%d *p2=%d",*p1,*p2);  
printf("\nAfter swap: *p1=%d *p2=%d",*p1,*p2);  
Before swap: *p1=20 *p2=30
After swap: *p1=30 *p2=20