1. परिचय
प्रोग्रामिङ शुरुआतीहरूले C Gengo सिक्न सुरु गर्दा, धेरै मानिसहरू पहिलो पटक अड्किने कुरा 「प्वाइन्टर」 भन्ने अवधारणा हो। 「एड्रेस? रेफरेन्स? केही जटिल जस्तो…」 जस्तो महसुस गरेर टाढा रहने व्यक्तिहरू पनि कम छैनन्। तर, C Gengo को सार बुझ्न र प्रभावकारी प्रोग्रामिङ गर्नको लागि, प्वाइन्टरको समझ टाढा गर्न नसकिने महत्वपूर्ण विषय हो।
प्वाइन्टर भनेको, सरल शब्दमा 「मेमोरीमा रहेको एड्रेसलाई ह्यान्डल गर्ने प्रणाली」 हो। यो प्रणालीलाई राम्रोसँग प्रयोग गरेर, फङ्सनहरू बीच प्रभावकारी रूपमा डेटा साटासाट गर्न, गतिशील रूपमा मेमोरी सुरक्षित गर्न, र C Gengo जस्तै उच्चस्तरीय र लचिलो प्रोग्रामिङ सम्भव हुन्छ।
यस लेखमा, प्वाइन्टर के हो भन्ने आधारभूत कुराबाट सुरु गरेर, किन प्वाइन्टर प्रयोग गर्नुपर्छ, के के फाइदाहरू छन् भन्ने कुरा बिस्तारै व्याख्या गर्नेछौं। थप रूपमा, विशिष्ट कोड उदाहरणहरू, ध्यान दिनुपर्ने बुँदाहरू, प्रायः सोधिने प्रश्नहरू समेत समेटेर, कार्यस्थलमा पनि उपयोगी ज्ञानलाई दृढतापूर्वक हासिल गर्न सकिने सामग्री प्रदान गर्नेछौं।
「प्वाइन्टर कठिन छ」 भन्ने सोच्ने व्यक्तिहरू पनि निश्चिन्त रहनुहोस्। यस लेखमा, शुरुआतीको दृष्टिकोणलाई महत्व दिँदै, सरल व्याख्याद्वारा प्वाइन्टरको समझलाई गहिरो बनाउनेछौं।
2. C भाषा को पॉइन्टर के हो?
पॉइन्टर C भाषा सिक्नका लागि टाढा नजाने महत्वपूर्ण अवधारणा हो। पॉइन्टरलाई राम्रोसँग प्रयोग गरेर, दक्ष र लचिलो प्रोग्राम बनाउन सकिन्छ। तर, शुरुआतीहरूका लागि यो थोरै कठिन पनि हो। यस सेक्सनमा, 「पॉइन्टर के हो?」 भन्ने आधारभूत कुरा देखि, वास्तविक प्रयोगको प्रवेशसम्मलाई सजिलै व्याख्या गर्नेछौं।
पॉइन्टर भनेको「एड्रेसलाई संग्रह गर्ने भेरिएबल」
पॉइन्टर भनेको, एक शब्दमा भन्नुपर्दा「अन्य भेरिएबलहरू जहाँ संग्रहित छन् त्यस मेमोरीको एड्रेसलाई सम्झने भेरिएबल」हो।
कम्प्युटरको मेमोरी प्रत्येक ठेगाना(एड्रेस)अनुसार मानलाई संग्रह गर्ने प्रणाली हो। सामान्य भेरिएबलले「मान आफैँ」लाई राख्छ, तर पॉइन्टरले「मान संग्रहित भएको स्थान(एड्रेस)」लाई राख्छ।
उदाहरणका लागि, तलको कोडलाई विचार गरौं।
int a = 10;
int *p = &a;
यस अवस्थामा, a
भनेको पूर्णांक मान 10 राख्ने सामान्य भेरिएबल हो, र p
भनेको a
को एड्रेसलाई संग्रह गर्ने पॉइन्टर हो।*p
प्रयोग गरेर, पॉइन्टर p
ले देखाइरहेको मान, अर्थात् a
को सामग्रीमा पहुँच गर्न सकिन्छ।
पॉइन्टरको आधारभूत संरचना र अर्थ
C भाषामा, पॉइन्टरलाई तलको जस्तै घोषणा र प्रयोग गरिन्छ।
अपरेशन | संरचना उदाहरण | व्याख्या |
---|---|---|
पॉइन्टरको घोषणा | int *ptr; | इन्टेजर प्रकारको पॉइन्टर(एड्रेस संग्रह) |
एड्रेस प्राप्ति | &भेरिएबल नाम | भेरिएबलको एड्रेस प्राप्ति |
अप्रत्यक्ष सन्दर्भ | *पोइन्टर नाम | पॉइन्टरले देखाइरहेको मानलाई प्राप्त वा परिवर्तन |
पॉइन्टर आवश्यक हुने कारण
यहाँ, किन पोइन्टर आवश्यक हुन्छ? मुख्य कारणहरू तलका अनुसार छन्:
- मेमोरीको लचिलो व्यवस्थापन(डायनामिक आवंटन・रिलिज आदि)सम्भव हुन्छ
- एरे र स्ट्रक्चर सँग मिलाएर डेटा दक्षतापूर्वक ह्यान्डल गर्न सकिन्छ
- फङ्क्शनहरू बीच डेटा साझेदारी र अद्यावधिक सम्भव हुन्छ(「रेफरन्स पास」)
यी फाइदाहरूको बारेमा, अर्को सेक्सन「3. C भाषामा पोइन्टर प्रयोग गर्ने 3 फाइदाहरू」मा विस्तृत रूपमा व्याख्या गर्नेछौं।
3. C भाषा मा पोइन्टर प्रयोग गर्ने 3 फाइदाहरू
C भाषामा पोइन्टरको भूमिका अत्यन्त ठूलो छ, केवल 「एड्रेसलाई ह्यान्डल गर्ने कार्य」 भन्दा बढी मूल्य छ। यस भागमा, पोइन्टर प्रयोग गरेर प्राप्त हुने प्रमुख फाइदाहरूलाई ३ मा सीमित गरी, शुरुआतीहरूलाई पनि बुझ्न सजिलो बनाइन्छ।
फाइदा 1: मेमोरीको प्रभावकारी उपयोग गर्न सकिन्छ
पॉइन्टर प्रयोग गर्ने प्रमुख फाइदाहरू मध्ये एक हो, मेमोरी प्रयोगको अनुकूलन। उदाहरणका लागि, ठूलो संरचना वा एरेलाई फङ्क्शनमा पास गर्दा, मानलाई प्रतिलिपि गर्ने सट्टा, पोइन्टर प्रयोग गरेर एड्रेस मात्र पास गर्दा, प्रक्रिया हलुका हुन्छ र कार्यसम्पादन गति पनि बढ्छ।
उदाहरणको रूपमा तलको कोड हेर्नुहोस्:
void printArray(int *arr, int size) {
for(int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
}
यसरी, एरेको पहिलो तत्वको एड्रेसलाई फङ्क्शनमा पास गरेर, एरेको सम्पूर्णलाई प्रभावकारी रूपमा प्रक्रिया गर्न सकिन्छ।
फाइदा 2: फङ्क्शनहरू बीच डेटा साझेदारी‑अद्यावधिक सम्भव हुन्छ
C भाषामा, फङ्क्शनलाई मान पास गर्दा 「मान पास」 हुन्छ, जसले गर्दा कल गर्ने पक्षको भेरिएबलको सामग्री परिवर्तन गर्न सकिँदैन। तर, पोइन्टर प्रयोग गर्दा, भेरिएबलको एड्रेस पास गरेर सिधै त्यसको सामग्री परिवर्तन गर्न सम्भव हुन्छ।
void updateValue(int *num) {
*num = 100;
}
उपरोक्त जस्तै कोडमा, *num = 100;
द्वारा, फङ्क्शनको बाहिरको भेरिएबलको मान परिवर्तन हुन्छ। यसले, फङ्क्शनहरू बीच डेटा साझेदारी र सम्पादनलाई लचकदार बनाउँछ।
फाइदा 3: गतिशील मेमोरी व्यवस्थापन सम्भव हुन्छ
C भाषाको विशेषता \”गतिशील मेमोरी आवंटन\” हो। यो प्रविधि चलाउदा आवश्यक मेमोरी मात्र बाँडेर प्रयोग गर्ने हो, जसमा malloc
र free
जस्ता फङ्क्शनहरू र पोइन्टरलाई संयोजन गरेर प्रयोग गरिन्छ।
int *arr = (int *)malloc(sizeof(int) * 10);
if (arr != NULL) {
// एरेको रूपमा प्रयोग
arr[0] = 1;
// मेमोरी मुक्त गर्नुहोस्
free(arr);
}
यसरी, पोइन्टर प्रयोग गरेर, प्रोग्रामको मेमोरी प्रयोगलाई अनुकूलन गर्न र लचकदार स्रोत व्यवस्थापन सम्भव हुन्छ। स्थिर एरेले सम्हाल्न नसक्ने परिवर्तनशील आकारको डेटा पनि सम्हाल्न सक्ने बुँदा ठूलो फाइदा हो।
उपरोक्त ३ बुँदाहरू C भाषामा पोइन्टर प्रयोग गर्दा मुख्य फाइदाहरू हुन्।
पॉइन्टर जटिल देखिन सक्छ, तर यसको शक्ति बुझेर र प्रयोग गरेर, C भाषाको वास्तविक मूल्य प्रदर्शन गर्न सकिन्छ।

4. पोइन्टरको व्यावहारिक प्रयोग र कोड उदाहरण
जसरी अहिलेसम्म परिचय गराइएको छ, पोइन्टर C भाषा मा अत्यन्त शक्तिशाली कार्य हो। यस भागमा, वास्तविक कोड प्रयोग गरेर, पोइन्टरको विशिष्ट प्रयोगलाई चरणबद्ध रूपमा सिक्नेछौं। शुरुआतीहरूका लागि पनि बुझ्न सजिलो बनाउन, टिप्पणी र व्याख्या सहित बिस्तारै व्याख्या गरिन्छ।
पॉइन्टर प्रयोग गरेर मान परिवर्तन(फङ्सन भित्र चललाई पुनः लेख्ने)
चलको ठेगाना फङ्सनमा पास गरेर, फङ्सन भित्रबाट मूल चललाई प्रत्यक्ष परिवर्तन गर्न सकिन्छ। यो “सन्दर्भ पास” को आधार हो।
#include <stdio.h>
void changeValue(int *ptr) {
*ptr = 50; // प्वाइन्टरमार्फत मान परिवर्तन गर्नुहोस्
}
int main() {
int num = 10;
changeValue(&num); // num भेरिएबलको ठेगाना पठाउनुहोस्
printf("परिवर्तन पछि मान: %d\n", num); // → 50 देखिन्छ
return 0;
}
व्याख्या:
यो कोडमा, changeValue
फङ्सन भित्र *ptr = 50;
गरेर, main
फङ्सन भित्रको num
को मानलाई प्रत्यक्ष परिवर्तन गरिन्छ।
एरेलाई पोइन्टरले सञ्चालन गर्ने
एरे र पोइन्टर अत्यन्त नजिकको सम्बन्धमा छन्। एरेको पहिलो तत्व वास्तवमा ठेगाना रूपमा प्रयोग गर्न सकिन्छ, र पोइन्टरको रूपमा ह्यान्डल गर्न सकिन्छ।
#include <stdio.h>
void printArray(int *arr, int size) {
for(int i = 0; i < size; i++) {
printf("%d ", *(arr + i)); // प्वाइन्टर गणित प्रयोग गरेर पहुँच
}
printf("
");
}
int main() {
int numbers[] = {1, 2, 3, 4, 5};
printArray(numbers, 5);
return 0;
}
व्याख्या:
*(arr + i)
ले arr[i]
सँग समान अर्थ हुन्छ। पोइन्टर प्रयोग गरेर, एरे जस्तै डेटा संरचनालाई लचिलो रूपमा ह्यान्डल गर्न सकिन्छ।
संरचना र पोइन्टरको संयोजन
संरचनाको पोइन्टर प्रयोग गर्दा, ठूलो डेटा संरचनालाई पनि प्रभावकारी रूपमा सञ्चालन गर्न सकिन्छ। तल संरचना र पोइन्टरको संयोजनको आधारभूत उदाहरण छ।
#include <stdio.h>
typedef struct {
char name[20];
int age;
} Person;
void printPerson(Person *p) {
printf("नाम: %s\n", p->name);
printf("उमेर: %d\n", p->age);
}
int main() {
Person user = {"佐藤", 30};
printPerson(&user); // संरचना को ठेगाना पठाउनुहोस्
return 0;
}
व्याख्या:
संरचना पोइन्टर p
प्रयोग गरेर, ->
अपरेटर प्रयोग गरी सदस्य चलमा पहुँच गर्न सकिन्छ। यसले ठूलो संरचनामा पनि बिनाव्यर्थ प्रक्रिया सम्भव बनाउँछ।
उपरोक्त कोड उदाहरणहरू मार्फत, पोइन्टरको आधारभूत प्रयोग विधिहरू प्रस्तुत गर्यौं। C भाषा मा पोइन्टर केवल मेमोरी सञ्चालन मात्र होइन, फङ्सन र संरचनासँगको सहकार्यद्वारा कार्यक्रमको लचिलोपन र विस्तारशीलता धेरै बढाउँछ।
5. पोइन्टर प्रयोग गर्दा ध्यान दिनुपर्ने बुँदा र जालहरू
पॉइन्टर एक अत्यन्त शक्तिशाली कार्य हो, तर यसको प्रयोग गलत गरेमा प्रोग्रामको बग वा सुरक्षा जोखिमको कारण बन्न सक्छ। यस भागमा, C भाषा मा पोइन्टर प्रयोग गर्दा विशेष ध्यान दिनुपर्ने बुँदाहरू प्रस्तुत गरिन्छ। यी बुझेर, सुरक्षित र स्थिर कोड लेख्न सकिन्छ।
अप्रारम्भिक पोइन्टरको प्रयोगमा ध्यान
पॉइन्टर घोषणा मात्र गरेर प्रारम्भिक नगरी प्रयोग गरेमा, अनिश्चित मेमोरी ठेगानामा पहुँच गर्ने जोखिम हुन्छ। यसलाई “निरपराध पोइन्टर” वा “ड्याङ्ग्लिङ पोइन्टर” पनि भनिन्छ।
int *ptr; // आरम्भ गरिएको छैन
*ptr = 100; // → अज्ञात ठेगानामा पहुँच। क्र्यास हुने सम्भावना धेरै!
उपाय:
पॉइन्टर प्रयोग गर्नु अघि अनिवार्य रूपमा NULL
वा वैध ठेगानामा प्रारम्भिक गरौं।
int *ptr = NULL;
मेमोरी लीक रोकथाम
malloc
जस्ता प्रयोगले गतिशील रूपमा सुरक्षित मेमोरीलाई यदि free
गर्न बिर्सियो भने, प्रयोग गरिएको मेमोरी मुक्त नहुनुका कारण मेमोरी लीक उत्पन्न हुन्छ। यो प्रोग्रामको दीर्घकालीन चलाउँदा गम्भीर समस्या ल्याउन सक्छ।
int *data = (int *)malloc(sizeof(int) * 100);
// प्रक्रिया पछि...
free(data); // ← नबिर्सी मुक्त गर्नुहोस्
उपाय:
malloc
प्रयोग गरेपछि, अनिवार्य रूपमाfree
सँगै प्रयोग गर्ने बानी बनाउनुहोस्।- त्रुटि ह्यान्डलिङ समेत, सुरक्षित/मुक्त गर्ने समयलाई स्पष्ट रूपमा व्यवस्थापन गर्नुहोस्।
पॉइन्टरको दोहोरो मुक्तिमा ध्यान
free
लाई धेरै पटक कल गरेमा, दोहोरो मुक्त (दोहोरो free) जस्तो गम्भीर त्रुटि उत्पन्न हुन्छ। यसले अनपेक्षित व्यवहार वा सबैभन्दा खराब अवस्थामा प्रोग्रामको क्र्यास हुन सक्छ।
int *ptr = (int *)malloc(sizeof(int));
free(ptr);
free(ptr); // ← दोस्रो पटक जोखिमपूर्ण छ!
उपाय:
free()
कल गरेपछि तुरुन्तै पोइन्टरलाई NULL
मा सेट गर्नु सुरक्षित हुन्छ।
free(ptr);
ptr = NULL;
सीमा बाहिर पहुँच (बफर ओभररन)
पॉइन्टर प्रयोग गरेर एरे वा मेमोरी ब्लकमा पहुँच गर्दा, सीमा बाहिरको क्षेत्रमा पहुँच हुन सक्छ। यसलाई बफर ओभररन भनिन्छ, र अत्यन्त जोखिमपूर्ण छ।
int arr[5];
arr[5] = 10; // इन्डेक्स 0-4 हो, त्यसैले यो सीमा बाहिर छ
उपाय:
- एरेको आकार अनिवार्य रूपमा जाँच गर्नुहोस्, लूपको समाप्ति सर्तहरूमा ध्यान दिनुहोस्
- पॉइन्टर गणना गर्दा पनि पहुँच योग्य क्षेत्रलाई पार नगर्नुहोस्
प्रकारको असमानतामा ध्यान
विभिन्न प्रकारका पोइन्टरहरूलाई जबरजस्ती प्रयोग गर्दा, डेटा नष्ट वा प्रकार रूपान्तरणबाट बग उत्पन्न हुन्छ। विशेष गरी void *
प्रकारलाई प्रयोग गर्दा, सही कास्टको विचार आवश्यक छ।
void *ptr = malloc(sizeof(int));
int *num = (int *)ptr; // स्पष्ट कास्ट आवश्यक छ
सुरक्षित पोइन्टर अपरेसनका लागि संक्षिप्त सारांश
- पॉइन्टरलाईप्रारम्भिक गरेपछि प्रयोग
- गतिशील मेमोरीलाईसुरक्षित गरेपछि अनिवार्य रूपमा मुक्त
free
पछि NULL मा सेट- एरे पहुँच वा पोइन्टर गणना गर्दा सीमा बाहिर पहुँचमा ध्यान
- प्रकारलाई सही रूपमा ह्यान्डल गर्ने द्वारा बग रोक्न सकिन्छ
6. सामान्य प्रश्नहरू (FAQ)
पोइन्टरको प्रक्रिया सिक्दा गर्दा, धेरै शुरुआतीहरूले साझा रूपमा राख्ने शंकाहरू छन्। यो खण्डमा, वास्तविक सामान्य प्रश्नहरूलाई उठाएर, विस्तृत रूपमा उत्तर दिन्छौं। सिकाइमा आउने बाधाहरू हटाउन सहयोगी सुझावको रूपमा, कृपया यसको उपयोग गर्नुहोस्।
Q1. पोइन्टर र अर्रेको भिन्नता के हो?
A.
पोइन्टर र अर्रे समान देखिन्छन् तर कडाइले फरक छन्। अर्रे अविरल स्मृति क्षेत्र हो, र परिभाषण गर्दा साइज निश्चित हुन्छ। अर्कोतर्फ, पोइन्टर कुनै पनि स्मृतिको ठेगानालाई राख्ने चर हो।
int arr[3] = {1, 2, 3};
int *ptr = arr; // arr ले ऐरेको पहिलो तत्वको ठेगाना सूचित गर्दछ
यसरी, arr
ले प्रथम तत्वको ठेगाना फर्काउँछ त्यसैले ptr = arr
गरेर पोइन्टरको रूपमा प्रयोग गर्न सकिन्छ तर, अर्रेको नाम स्थिर पोइन्टर जस्तो व्यवहार हुन्छ र पुन: असाइन गर्न सकिँदैन।
Q2. पोइन्टर प्रयोग नगरी पनि C भाषाको कार्यक्रम लेख्न सकिन्छ?
A.
सानो र सरल कार्यक्रमको लागि, पोइन्टर बिना लेख्न सकिन्छ। तर, व्यावहारिक कार्य वा ठूलो विकास, कम स्तरको प्रक्रिया, एम्बेडेड विकास आदिमा पोइन्टर लगभग आवश्यक हुन्छ।
विशेष गरी निम्न जस्ता अवस्थामा, पोइन्टरको उपयोग अपरिहार्य हुन्छ।
- फङ्क्सनहरू बीच चरको मान अपडेट गर्न चाहँदा
- गतिशील स्मृति आरक्षण आवश्यक हुँदा
- अर्रे वा संरचनालाई कुशलतापूर्वक सञ्चालन गर्न चाहँदा
Q3. void पोइन्टर भनेको के हो? कुन अवस्थामा प्रयोग गर्छौं?
A.
void *
भनेको ‘कुनै पनि प्रकारको डाटा ह्यान्डल गर्न सकिने’ सार्वभौमिक पोइन्टर हो। विशिष्ट प्रकार अनिश्चित रहँदा ठेगाना राख्न चाहँदा प्रयोग गर्छौं। उदाहरणका लागि, लाइब्रेरी फङ्क्सन वा कल्ब्याक फङ्क्सनहरूमा धेरै प्रयोग हुन्छ।
void *ptr;
int a = 10;
ptr = &a;
तर, void *
बाट मूल प्रकारमा पहुँच गर्न कास्ट (प्रकार रूपान्तरण) आवश्यक छ:
int value = *(int *)ptr;
प्रयोग गर्दा लचिलो डिजाइन गर्न सकिन्छ तर गलत प्रकारमा पहुँच गर्दा बगको कारण बन्न सक्छ त्यसैले सावधानीपूर्वक ह्यान्डल गर्नुपर्छ।
Q4. C++ वा अन्य भाषाहरूमा पनि पोइन्टर प्रयोग हुन्छ?
A.
C++ मा पोइन्टर त्यसै प्रयोग गर्न सकिन्छ तर, std::vector
वा std::unique_ptr
जस्ता स्मार्ट पोइन्टर द्वारा, सुरक्षित उपयोग मुख्य प्रवाह भएको छ।
अर्कोतर्फ, Java वा Python जस्ता उच्च भाषाहरूमा, पोइन्टरको अवधारणा लुकाइएको हुन्छ त्यसैले स्पष्ट रूपमा पोइन्टर सञ्चालन गर्दैनौं। यसले सुरक्षालाई बढाउँछ तर कम स्तरको नियन्त्रण गर्न सकिँदैन।
C भाषा जस्तै पोइन्टरलाई स्वतन्त्र रूपमा ह्यान्डल गर्न सकिने भाषा मूल्यवान छ, र त्यसैले यसको ह्यान्डलिङमा सावधानी र समझ आवश्यक छ।
7. सारांश: C भाषा मा पोइन्टर प्रयोग गर्ने अर्थ के हो?
पॉइन्टर C भाषामा विशेष रूपमा महत्वपूर्ण र सहजै गलत बुझिने अवधारणाहरू मध्ये एक हो। यस लेखमा, पोइन्टरको आधारभूत मेकानिज्मदेखि व्यावहारिक प्रयोग, र प्रयोग गर्दा प्राप्त हुने फाइदाहरू तथा ध्यान दिनुपर्ने बुँदाहरू सम्मलाई व्यापक रूपमा व्याख्या गरिएको छ।
यहाँ, फेरि एकपटक यस लेखका मुख्य बुँदाहरूलाई सम्झौं।
✅ पोइन्टरका मुख्य बुँदाहरूको सारांश(तीन प्रमुख बिन्दुहरू)
- पॉइन्टर भनेको「एड्रेस सङ्ग्रह गर्ने भेरिएबल」 हो।
- मेमोरीमा स्थितिको(एड्रेस)व्यवस्थापन र सञ्चालन गर्न सक्ने मेकानिज्म।
- प्रयोग गर्दा प्राप्त हुने तीन प्रमुख फाइदाहरू
- मेमोरीको प्रभावकारी प्रयोग
- फङ्क्सनहरू बीचको डेटा साझेदारी(मान परिवर्तन)
- डायनामिक मेमोरी व्यवस्थापनद्वारा लचिलो डिजाइन
- सुरक्षित रूपमा प्रयोग गर्नका लागि ध्यान दिनुपर्ने बुँदाहरू पनि महत्वपूर्ण छन्
- प्रारम्भिकरण बिर्सनु, दोहोरो मुक्ती, सीमा बाहिर पहुँचमा ध्यान दिनु
- मेमोरीको आवंटन र मुक्ती सँगै गर्नु
पॉइन्टरलाई सही रूपमा बुझेर प्रयोग गर्न सक्ने बनिसकेपछि, C भाषामा लेख्न सकिने प्रोग्रामको दायरा एकैछिनमा विस्तार हुन्छ। सुरुमा कठिन लाग्न सक्छ, तर विशिष्ट कोड उदाहरणहरू प्रयोग गरेर एक-एक गरी सिक्दै जाँदा, यो निश्चित रूपमा सीपको रूपमा हासिल गर्न सकिन्छ।
C भाषामा पोइन्टरको समझ केवल「ज्ञान」 मात्र होइन,「के गर्न सकिन्छ」 भन्ने क्षमतालाई ठूलो रूपमा बढाउने हतियार हो। कृपया बारम्बार सिक्नुहोस्, वास्तविक कोडमा लागू गर्नुहोस्।