सूचक अंकगणित C और C++ में एक आम विशेषता है, जो स्मृति पते के प्रत्यक्ष हेरफेर की अनुमति देता है। जबकि शक्तिशाली, अनुचित उपयोग बग, सुरक्षा भेद्यता और अपरिभाषित व्यवहार का कारण बन सकता है। यह लेख वास्तविक दुनिया के उदाहरण प्रस्तुत करता है जो पॉइंटर अंकगणित के अनुप्रयोगों और नुकसान दोनों को दर्शाता है।

उदाहरण 1: Traversing Arrays

सूचक अंकगणित अक्सर कुशलतापूर्वक सरणी के माध्यम से iterate करने के लिए प्रयोग किया जाता है। उदाहरण के लिए, एक पूर्णांक सरणी के तत्वों को योग करने के लिए:

]Correct use:]

int sum = 0;

Int *ptr = सरणी;

(in) i = 0; i < size; i++) {

+= * (ptr + i);

A

यह विधि सही ढंग से सूचक अंकगणित का उपयोग कर सरणी तत्वों तक पहुंचती है।

पिटफ 1: पॉइंटर आर्थमेटिक बेयोन्ड आर्रे बाउंड्स

आबंटित स्मृति से परे चलती हुई सूचकों को अपरिभाषित व्यवहार का कारण बन सकता है। उदाहरण के लिए:

Int *ptr = सरणी;

(in) i = 0; i < = size; i++) {

printf("%dn",*(ptr+i));

A

* (ptr + size) तक पहुँचने से सरणी की सीमा से अधिक हो जाती है, जिससे अप्रत्याशित परिणाम हो जाते हैं।

उदाहरण 2: स्ट्रिंग हेरफेर

सूचक अंकगणित अक्सर स्ट्रिंग प्रसंस्करण में प्रयोग किया जाता है। उदाहरण के लिए, एक स्ट्रिंग की प्रतिलिपि:

]Correct दृष्टिकोण:

char * src = "Hello";

char dest[6];

char * p = src;

char *q = dest;

(* p) {

* Q++ = * p++;

A

* Q = ";

पिटफ 2: स्ट्रिंग कॉपीिंग में ऑफ-बाय-वन त्रुटियां

शून्य टर्मिनेटर के लिए अंतरिक्ष आवंटित करने या बफर के कारण बफर ओवरफ्लो से परे कॉपी करने में विफल रहा। उदाहरण के लिए:

char dest[5];

char *p = "विश्व";

(in) i = 0; i < = 5; i++) {

(i) = p[i];

A

यह छह अक्षरों को पांच-character बफर में कॉपी करता है, जिससे ओवरफ्लो होता है।

निष्कर्ष

सूचक अंकगणित C और C++ में लचीलापन प्रदान करता है, लेकिन त्रुटियों से बचने के लिए सावधानीपूर्वक हैंडलिंग की आवश्यकता होती है। आम नुकसान को समझना सॉफ्टवेयर विकास में बग और सुरक्षा मुद्दों को रोकने में मदद करता है।