हर एक Variable का एक Memory Address होता है और Memory Address देखने के लिए Programmer को variable से पहले '&'(address operator) लगाना पड़ता है |
int a;
printf("Address of a: %d",&a);
Output:
Address of a : 6356748    // 6356748 is address of variable a 

इसी memory address की मदद से Variable की value को access किया जाता है , इसी को 'Pointers' कहते है |  Pointer किसी दूसरे variable का address hold करके रखता है | हर एक variable का एक address होता है | जब variable declare होता है तभी उसका एक memory location पर वो store होता है |

data_type *pointer_name;
किसी integer data type variable का address hold करना है तो pointer भी उसी data type का होगा जिस data type का variable हो, मतलब variable int है तो pointer भी int ही होगा, अगर variable char हो तो pointer variable भी char ही होगा |

Pointer किसी की value hold करके नहीं रखता, बल्कि सिर्फ उसका address hold करके रखता है और उस address से ही pointer के साथ variable के value को print किया जाता है |


Referencing Operator

Referencing मतलब किसी दूसरे variable का address hold करके रखना होता है |
int a = 10;
int *ptr; 
ptr = &a;  //address of a stored in ptr


Dereferencing Operator

Dereferencing में asterisk ( * ) का इस्तेमाल करते पर pointer में store किये हुए value को access किया जाता है |
int a = 10;
int *ptr; 
ptr = &a;
int b = *ptr; // ptr means dereferencing
printf("Value of a : %d", b);
Output :
Value of a : 10