C Programming में Pointer एक ऐसा concept है जो C language को और powerful बनाता है, क्योंकि ये direct memory access की सुविधा देता है। तो इस लिए आज के इस पोस्ट में हम C Programming pointer के बारे में detail और आसान भाषा में step by step पढ़ेंगे। इस post को लिखने में मैं अपना 100% दे रहा हूँ, अगर आपको pointer अच्छे से समझना है तो इस पोस्ट को पूरा पढ़ें।
Table of Contents
Pointer in C क्या है?
Pointer एक variable होता है जो किसी दूसरे variable के memory address को store करता है, ना कि value को।
यानी normal variable value store करता है, pointer memory location Store करता है।
सीधे शब्दों में कहें तो —
Pointer खुद data को store नहीं करता, बल्कि उस जगह को point करता है जहाँ data memory में रखा होता है।
उदाहरण के लिए:
अगर आपके पास एक variable है
int a = 15;
तो उसका memory address (जैसे 0x7ffee4a9) एक pointer के ज़रिए access किया जा सकता है।
इस तरह C Programming Pointer हमें memory level पर direct access देता है,
जिससे हमारा program ज़्यादा fast, efficient, और control-oriented बनता है।
Pointer Declaration और Initialization
Pointer को declare करने के लिए हम * (asterisk) symbol का उपयोग करते हैं।
Declaration का basic syntax कुछ इस तरह है:
Syntax:
data_type *pointer_name;
Declaration उदाहरण:
int *ptr;
char *ch;
float *fptr;
ऊपर के example में
- ptr integer variable का pointer है
- ch character variable का pointer है
- fptr float variable का pointer है
अब pointer को initialize करने के लिए हम किसी variable का address assign करते हैं, जो & (address of operator) से करते हैं।
int num = 20;
int *ptr = #
यहाँ ptr में variable num का memory address store हो जाएगा, वैसे जैसे हम scanf() function की मदद से किसी variable में value store करने के लिये उस variable का address pass करते हैं।
चूकि ptr एक pointer variable है इसलिये हमने ptr variable में num variable का address assign किया है, इसलिये अगर हमें num की value को access करना है तो *ptr लिखते हैं अगर num variable के address को acess करना है तो सिर्फ ptr लिखेंगे।
जैसे –
printf(“Value of num: %d\n”, num);
printf(“Address of num: %p\n”, &num);
Example Program:
#include <stdio.h>
int main()
{
int num = 15;
int *ptr;
ptr = &num // pointer p में a का address store करना
printf("The value of num = %d\n", num);
printf("The address of num = %p\n", &num);
printf("The value of p (address) = %p\n", ptr);
printf("The value of *p (dereference) = %d\n", *ptr);
*ptr = 25; // pointer के ज़रिए value बदलना
printf("After change The Value of a using Pointer = %d\n", num);
return 0;
}
mOutput:
The value of num = 15
The address of num = 0061FF18
The value of ptr (address) = 0061FF18
The value of *ptr (dereference) = 15
After change The Value of num using Pointer = 25
Note : Address को print करने के लिए %p का उपयोग किया जाता है।
यहाँ हमने देखा कि pointer के जरिए हमने variable num की value change कर दी।
यह C Programming Pointer की सबसे बड़ी खासियत है — यह direct memory manipulation की शक्ति देता है। निचे image में देखकर और बेहतर समझ सकते हैं।

Pointer इतना inportant क्यों है?
C language को low-level language कहा जाता है क्योंकि यह memory के बहुत करीब काम करती है।
और pointer वो “दरवाज़ा” है जिससे हम सीधे memory के अंदर झाँक सकते हैं — वहाँ की value को देख या बदल सकते हैं।
यानि pointer हमें memory पर direct control देता है।
अब चलो step-by-step समझते हैं कि ये कितना ज़रूरी है
(1) Memory को Control करने के लिए
हर variable memory में store होता है।
Normal variable से हम सिर्फ उसकी value तक पहुँच सकते हैं,
लेकिन pointer से हम उसकी memory location तक पहुँच सकते हैं। और उस location पर जो value है उसे access कर सकते है।
Example देखो :
#include <stdio.h>
int main()
{
int a = 5;
int *p = &a;
printf("The address of a : %p", p); // ये 'a' का memory address दिखाएगा
return 0;
}
Output:
The address of a : 0061FF18
ऊपर program से आपको पता चल गया होगा, कि variable “a” memory में कहाँ किस address पर है।
ये concept तब बहुत काम आता है जब हम embedded systems, operating system development, या system-level programming करते हैं —
जहाँ direct memory access की जरूरत पड़ती है।
(2️) Function में Call by Reference के लिए
हम function को detail में पढ़ चुके जिसमें एक Topic रह गया था Call by reference तो चलिए call by value को भी थोड़ा revise कर लेते हैं। call by refrence को तो पढ़ेंगे ही।
जब हम किसी function में variable भेजते हैं, तो उस variable की actual value नहीं जाती उसकी copy जाती है। इसलिये इसे हम function call में call by value कहते हैं।
इसलिए function के अंदर value change करने पर बाहर कोई फर्क नहीं पड़ता।
लेकिन pointer इस limitation को खत्म करता है —
pointer के ज़रिए हम function में variable का address भेजते हैं, जिससे वो direct modify हो सकता है। और इसलिए इसे हम call by reference कहते हैं।
Call by Reference Example Program :
#include <stdio.h>
void change(int *n)
{
*n = *n + 10;
}
int main()
{
int x = 5;
change(&x);
printf("The value of x : %d", x); // Output: 15
return 0;
}
Output :
The value of a : 15
यहाँ pointer ने x की original value बदल दी।
अगर pointer नहीं होता, तो सिर्फ copy बदलती और main variable वैसा ही रहता।
(3️) Dynamic Memory Allocation के लिए
कई बार हमें program run होने के बाद memory allocate करनी पड़ती है —
जैसे, जब हम user से input लेकर array का size तय करना चाहते हैं।
ऐसे में pointer अनिवार्य है, क्योंकि malloc(), calloc(), realloc() और free() जैसे functions pointer के साथ ही काम करते हैं।
Example:
int *p;
p = (int*) malloc(5 * sizeof(int));
यह code runtime पर 5 integers के लिए memory allocate करता है और उसका address p में store करता है।
जब काम खत्म हो जाए, तो हम free(p); function से memory release कर कर देते हैं।
अभी हमने array के बारे में detail में नहीं पढ़ा है, लेकिन आने वाले पोस्ट में इसे अच्छे से समझेंगे।
फिलहाल इतना समझ लीजिए कि array एक collection होता है same data type के elements का।
उदाहरण के लिए —
अगर हमें 5 या उससे ज़्यादा integer values store करना हों,
तो 5 अलग-अलग int type variables बनाने के बजाय हम एक array बना सकते हैं,
जिससे हम एक ही नाम के variable में कई integer values store कर सकते हैं।
बाकी array को हम आगे आने वाले blog में detail में सीखेंगे —
जहाँ आप जानोगे कि array memory में कैसे काम करता है और pointer के साथ इसका क्या relation है।
(4️) Array और String Handling के लिए
C language में array का नाम खुद एक pointer की तरह काम करता है।
इसका मतलब है कि array का नाम अपने पहले element का address represent करता है।
Example:
int arr[3] = {10, 20, 30};
int *p = arr;
printf(“%d”, *(p + 1)); // Output: 20
यहाँ p array के पहले element (arr[0]) को point कर रहा है।
(p + 1) से हम अगला element (arr[1]) access कर सकते हैं।
यानि array traversal और manipulation pointer के बिना अधूरा है।
Strings (जैसे char *ptr = “Hello”;) भी pointers पर ही based होती हैं।
इसलिए जब आप string handling सीखोगे — pointers हर जगह दिखाई देंगे।
(5️) Data Structures बनाने के लिए
अगर आपने कभी Linked List, Stack, Queue, या Tree जैसे advanced topics देखे हों —
तो जान लो, इन सबकी backbone pointer ही है।
Linked list में हर node अगले node का address pointer के ज़रिए रखता है
struct Node {
int data;
struct Node *next;
};
अगर pointer न होता, तो dynamic linking possible ही नहीं थी।
यानी C में flexible data structures बनाना pointers के बिना नामुमकिन है।
(6️) Performance Optimization के लिए
Pointer से direct memory access होता है, इसलिए:
- Data copy करने की ज़रूरत नहीं पड़ती
- Functions को original variable की value मिल जाती है
- Memory efficiently use होती है
यही वजह है कि pointer-based programs तेज़ और optimized होते हैं।
C Programming Pointer में आसान तुलना – Variable vs Pointer
| Feature | Normal Variable | Pointer |
| क्या store करता है | Value | Address |
| Access का तरीका | Direct value | Indirect (dereference) |
| Function में पास | Copy | Actual variable value |
| Use | Simple operations | Memory control, Dynamic allocation |
| Example | int a = 10; | int *p = &a; |
Real Life Analogy – Locker और चाबी
C Programming Pointer को ऐसे सोचो
मान लो तुम्हारे घर में एक locker है (variable)
और उसकी चाबी तुम्हारे पास है (pointer)।
अगर तुम्हारे पास चाबी है, तो तुम locker खोलकर अंदर की चीज़ें देख और बदल सकते हो।
ठीक ऐसा ही pointer करता है —
यह memory की चाबी हमें देता है, ताकि हम अंदर के data तक direct पहुँच सकें ।
Pointer और Array का संबंध
Array और Pointer का बहुत गहरा रिश्ता है।
असल में, array का नाम खुद एक pointer की तरह behave करता है जो उसके पहले element के address को represent करता है।
Example Program :
#include <stdio.h>
int main()
{
// Integer array का declaration और initialization
int arr[3] = {10, 20, 30};
// Pointer जो array के पहले element (arr[0]) को point कर रहा है
int *ptr = arr;
// Pointer का इस्तेमाल करके array elements access करना
printf("arr[0] = %d\n", *ptr); // arr[0] → 10
printf("arr[1] = %d\n", *(ptr + 1)); // arr[1] → 20
printf("arr[2] = %d\n", *(ptr + 2)); // arr[2] → 30
return 0;
}
Output:
arr[0] = 10
arr[1] = 20
arr[2] = 30
यहाँ हमने देखा कि pointer arithmetic (ptr + 1, ptr + 2) से हम array के elements को access कर सकते हैं।
इस तरह C Programming Pointer का इस्तेमाल array traversal और manipulation में बहुत उपयोगी है।
C Programming Pointer to Pointer (Double Pointer)
कभी-कभी हमें एक pointer का address भी store करना पड़ता है, ऐसे में हम pointer to pointer या double pointer का उपयोग करते हैं।
उदाहरण Program :
#include <stdio.h>
int main()
{
int a = 50;
int *p;
int **q;
p = &a;
q = &p;
printf("The value of a = %d\n", a);
printf("The value of *q = %d\n", *p);
printf("The value of **q = %d\n", **q);
return 0;
}
Output:
The value of a = 50
The value of *q = 50
The value of **q = 50
इसका मतलब है कि q एक pointer है जो p को point कर रहा है, और p a को।
यह chaining concept बड़े projects में बहुत useful होता है — खासकर जब हम multi-dimensional arrays या linked lists पर काम करते हैं।
FAQ: C Programming Pointer से जुड़े सामान्य प्रश्न
Q1. Pointer और normal variable में क्या फर्क है?
Ans: Normal variable value store करता है जबकि pointer memory address store करता है।
Q2. क्या pointer से variable की value बदली जा सकती है?
Ans: हाँ, pointer के ज़रिए indirectly variable की value को बदला जा सकता है।
Q3. क्या pointer बिना initialization के काम करता है?
Ans: नहीं, uninitialized pointer undefined behavior देता है।
Q4. क्या pointer array और string दोनों के साथ use हो सकता है?
Ans:बिल्कुल, array और string दोनों pointer compatible होते हैं।
क्या pointer का misuse खतरनाक है?
Ans: हाँ, गलत pointer operations से program crash या memory leak हो सकता है।
निष्कर्ष (Conclusion)
C Programming Pointer एक ऐसा concept है जो आपको C language की real power और depth समझाता है।
यह आपको memory-level programming सिखाता है, जिससे आप ज्यादा efficient, dynamic और professional coder बन सकते हैं।
Pointers शुरू में थोड़े confusing लग सकता हैं, लेकिन अगर आप इन्हें practice और visualization के साथ सीखें, तो C Programming के हर advanced concept (जैसे dynamic memory, data structure, file handling) आसान हो जाते हैं।
याद रखिए:
“Without understanding pointers, mastering C programming is impossible.”
इसलिए आज ही pointer के concept को code के साथ समझना शुरू करें — यही असली master key है C Programming Pointer में expert बनने की।
यह Post आपको कैसे लगा और इस पोस्ट से आप कुछ सीखें या हमें कुछ suggestion देना चाहते हैं तो बेझिझक comment कर सकते हैं। अपना feedback जरूर दें।
