Pointer Arithmetic क्या है? – Pointer Arithmetic In C In Hindi
हेलो फ्रेंड्स, आज के इस आर्टिकल में हम Pointer Arithmetic ऑपरेशन्स के बारे में बात करने वाले है |
आज हम विस्तार से जानेंगे कि Pointer Arithmetic क्या है? (What is Pointer Arithmetic In C In Hindi) और सी लैंग्वेज में Pointer Arithmetic का क्या उपयोग है?
तो आइये बिना समय गवाए जानते है Pointer Arithmetic के बारे में |
पॉइंटर अरिथमेटिक क्या है? (What is Pointer Arithmetic In C In Hindi)
जैसे की हम जानते है, पॉइंटर एक ऐसा वेरिएबल है जो दूसरे वेरिएबल का एड्रेस कॉन्टैन करता है और चूँकि पॉइंटर भी एक वेरिएबल है इसलिए इसका भी एक एड्रेस होता है | इस एड्रेस को हम अरिथमेटिक ऑपरेशन (addition, subtraction आदि) द्दारा manipulate कर सकते है और जब हम ऐसा करते है तो इसे ही Pointer Arithmetic कहते है |
Pointer arithmetic नार्मल arithmetic (जिसे हम आम तौर पर अपने दैनिक जीवन में उपयोग करते हैं) से थोड़ा अलग है।
सी लैंग्वेज हमे Pointer Arithmetic operations के लिए कुछ set of operators प्रोवाइड करती है जो की निम्न है -:
- Increment
- Decrement
- Addition
- Subtraction
- Comparison
आइये अब हम एक एक करके जानते है इन Pointer arithmetic operators के बारे में
1) Increment
जब हम पॉइंटर वेरिएबल के साथ इन्क्रीमेंट ऑपरेटर (++) का उपयोग करते है तब यह next एड्रेस रिटर्न करता है | ये जो next एड्रेस होता है वो उस करंट पॉइंटर एड्रेस और पॉइंटर के साइज (32 बिट सिस्टम के हिसाब से 4 बाइट होता है) के जोड़ के बराबर होता है |
For example -: यदि हमारे पास एक इन्टिजर पॉइंटर ip है जिसका एड्रेस 1000 है, तो इसे 1 से बढ़ाने पर हमें 1001 के बजाय 1004 (यानी 1000 + 1 * 4) मिलेगा क्योंकि int डेटा टाइप का साइज 4 बाइट्स होता है। लेकिन यदि हम एक ऐसे सिस्टम का उपयोग कर रहे हैं जहां int का आकार 2 बाइट्स है तो हमें 1002 (यानी 1000 + 1 * 2) मिलेगा जो की Next मेमोरी एड्रेस होगा |
आइये इन बातो को हम एक उदाहरण से समझते है |
Example -:
int i = 12, *ip = &i;
double d = 2.3, *dp = &d;
char ch = 'a', *cp = &ch;
मान लीजिए कि i, d और ch का address क्रमशः 1000, 2000, 3000 है |
Pointer Arithmetic on Integers
Pointer Expression | How it is evaluated ? |
ip = ip + 1 | ip => ip + 1 => 1000 + 1*4 => 1004 |
ip++ or ++ip | ip++ => ip + 1 => 1004 + 1*4 => 1008 |
Pointer Arithmetic on Float
Pointer Expression | How it is evaluated ? |
dp + 1 | dp = dp + 1 => 2000 + 1*8 => 2008 |
dp++ or ++dp | dp++ => dp+1 => 2008+1*8 => 2016 |
Pointer Arithmetic on Characters
Pointer Expression | How it is evaluated ? |
cp + 1 | cp = cp + 1 => 3000 + 1*1 => 3001 |
cp++ or ++cp | cp => cp + 1 => 3001 + 1*1 => 3002 |
Note -:
- Char type के पॉइंटर पर Arithmetic operation करने से यह सामान्य Arithmetic operation जैसा लगता है क्योंकि char डेटा टाइप का आकार 1 बाइट होता है।
- एक और महत्वपूर्ण बात ध्यान देने योग्य यह है कि जब हम numbers को जोड़कर या घटाकर पॉइंटर वेरिएबल को बढ़ाते और घटाते हैं तो यह आवश्यक नहीं है कि पॉइंटर वेरिएबल एक valid मेमोरी लोकेशन की ओर इशारा करे। इसलिए, जब हम पॉइंटर को इस तरह से move करते हैं तो हमें हमेशा विशेष ध्यान देना चाहिए।
- आम तौर पर, हम pointer arithmetic का उपयोग arrays के साथ करते हैं क्योंकि array elements contiguous फैशन में व्यवस्थित होते है |
Example Program
#include<stdio.h>
void main()
{
int i = 23, *ip = &i;
double d = 3.2, *dp = &d;
char ch = 'a', *cp = &ch;
printf("Value of ip = %u\n", ip);
printf("Value of dp = %u\n", dp);
printf("Value of cp = %u\n\n", cp);
printf("Value of ip + 1 = %u\n", ip + 1);
printf("Value of dp + 1 = %u\n", dp + 1);
printf("Value of cp + 1 = %u\n\n", cp + 1);
}
Output -:
Value of ip = 2293316
Value of dp = 2293304
Value of cp = 2293303
Value of ip + 1 = 2293320
Value of dp + 1 = 2293312
Value of cp + 1 = 2293304
Note -: यहाँ आउटपुट में जो नंबर्स (जैसे 2293316,2293304, 2293303) आया है वो मेमोरी एड्रेस है | ये एड्रेस आपके सिस्टम के हिसाब से अलग भी आ सकते है |
2) Decrement (–)
जब हम पॉइंटर वेरिएबल के साथ डेक्रेमेंट ऑपरेटर (- -) का उपयोग करते है तब यह पिछला एड्रेस रिटर्न करता है | ये जो पिछला एड्रेस होता है वो उस करंट पॉइंटर एड्रेस और पॉइंटर के साइज (32 बिट सिस्टम के हिसाब से 4 बाइट होता है) के घटाव के बराबर होता है |
For example -: यदि हमारे पास एक इन्टिजर पॉइंटर ip है जिसका एड्रेस 1000 है, तो इसे 1 से घटाने पर हमें 999 के बजाय 996 (यानी 1000 – 1 * 4) मिलेगा क्योंकि int डेटा टाइप का साइज 4 बाइट्स होता है। लेकिन यदि हम एक ऐसे सिस्टम का उपयोग कर रहे हैं जहां int का आकार 2 बाइट्स है तो हमें 998 (यानी 1000 – 1 * 2) मिलेगा |
आइये इन बातो को भी हम एक उदाहरण से समझते है |
Example -:
int i = 12, *ip = &i;
double d = 2.3, *dp = &d;
char ch = 'a', *cp = &ch;
मान लीजिए कि i, d और ch का address क्रमशः 1000, 2000, 3000 है |
Pointer Expression | How it is evaluated? |
ip– or –ip | ip => ip – 1 => 1000 – 1*4 => 996 |
dp– or –dp | dp => dp – 1=>2000 – 1*8=>1992` |
cp– or –cp | cp => cp – 1 => 3000 – 1*1 => 2999 |
आइये अब हम पॉइंटर अरिथमेटिक में addition ऑपरेटर के बारे में समझते है
3) Addition
जब हम किसी पॉइंटर में कोई वैल्यू Add करते है तो वह सबसे पहले पॉइंटर साइज के बराबर के वैल्यू से Multiply होता है फिर पॉइंटर में Add होता है इससे हमे Next पॉइंटर एड्रेस प्राप्त होता है |
इसका सिंटेक्स कुछ ऐसा होता है -:
Syntax
new_address = current_address + (number * size_of(data type))
Example program
#include<stdio.h>
int main()
{
int num = 5;
int *p;
//stores the address of num variable
p=#
printf("Address of p variable is %u \n",p);
//adding 3 to pointer variable
p=p+3;
printf("After adding 3: Address of p variable is %u \n",p);
return 0;
}
Output -:
Address of p variable is 34864302
After adding 3: Address of p variable is 34864314
नोट -:
- यह आउटपुट आपके कंप्यूटर सिस्टम में अलग आ सकता है
- यदि आपका सिस्टम 16 बिट वाला है तो यहाँ int डेटा टाइप 2 बाइट मेमोरी consume करेगा और यदि आपका सिस्टम 32 बिट या 64 बिट वाला है तो int डेटा टाइप 4 बाइट मेमोरी consume करेगा |
4) Subtraction
जिस तरह हम पॉइंटर के साथ Addition ऑपरेशन परफॉर्म करते है ठीक उसी तरह हम पॉइंटर के साथ subtraction ऑपरेशन भी परफॉर्म कर सकते है | जब हम पॉइंटर में कोई वैल्यू को घटाते है तो यह एक एड्रेस रिटर्न करता है जो की उस पॉइंटर का Just पिछला एड्रेस होता है | इसका सिंटेक्स कुछ ऐसा होता है -:
Syntax
new_address= current_address - (number * size_of(data type))
Example program
#include<stdio.h>
int main()
{
int num = 5;
int *p;
//stores the address of number variable
p=#
printf("Address of p variable is %u \n",p);
//Subtracting 3 to pointer variable
p=p-3;
printf("After Subtracting 3: Address of p variable is %u \n",p);
return 0;
}
Output -:
Address of p variable is 34864314
After Subtracting 3: Address of p variable is 34864302
5) Comparison
- हम पॉइंटर्स के साथ रिलेशनल ऑपरेटर्स ( <, <=, >, >= , == , !=) का उपयोग कर सकते हैं।
- == और != ऑपरेटरों का उपयोग दो पॉइंटर्स की तुलना करने के लिए किया जाता है |
- दो पॉइंटर्स की तुलना करने के लिए अन्य रिलेशनल ऑपरेटरों (<, <=, >, >=) का उपयोग तभी meaningful होता है जब वे दोनों एक ही array elements को point करते हैं।
- pointer arithmetic (addition, subtraction) की तुलना में Pointer comparisons ( <, <=, >, >= , == , !=) का उपयोग ज्यादा नहीं किया जाता।
- comparisons उपयोगी हैं, यदि आप check करना चाहते है कि दो पॉइंटर एक ही location को पॉइंट कर रहे हैं या नहीं।
Example Program
#include <stdio.h>
int main()
{
int num = 10;
int *ptr1 = # // ptr1 points to num
int *ptr2 = # // ptr2 also points to num
if(ptr1 == ptr2)
{
// Do some task
printf("Both pointers points to same memory location");
}
return 0;
}
Output
Both pointers points to same memory location
Subtraction of Two Pointers
दो पॉइंटर्स के बिच subtraction तभी संभव है जब वो दोनों एक ही डेटा टाइप के हो ।
Example Program
// C program to illustrate Subtraction of two pointers
#include <stdio.h>
int main()
{
int x;
// Integer variable
int N = 4;
// Pointer to an integer
int *ptr1, *ptr2;
// Pointer stores the address of N
ptr1 = &N;
ptr2 = &N;
// Incrementing ptr2 by 3
ptr2 = ptr2 + 3;
// Subtraction of ptr2 and ptr1
x = ptr2 - ptr1;
// Print x to get the Increment between ptr1 and ptr2
printf("Subtraction of ptr1 & ptr2 is %d\n", x);
return 0;
}
Output
Subtraction of ptr1 & ptr2 is 3
Rules for Performing Pointer Arithmetic
ऐसे कई ऑपरेशन हैं जो पॉइंटर्स पर perform नहीं किए जा सकते हैं। चूंकि, पॉइंटर एड्रेस को स्टोर करता है, इसलिए हमें उन ऑपरेशंस को नजरअंदाज करना चाहिए, जो illegal address प्रदान कर सकते हैं |
नीचे मैंने कुछ legal or Illegal pointer arithmetic operations के बारे में बताया है |
- हम दो addresses के बिच addition, multiplication और divisional ऑपरेशन परफॉर्म नहीं कर सकते, मगर subtraction कर सकते है |
- हम एक ही टाइप के एड्रेस को subtract कर सकते है |
- हम एड्रेस के साथ किसी इन्टिजर वैल्यू को multiply और divide नहीं कर सकते, मगर एड्रेस में हम इन्टिजर वैल्यू को add और subtract जरूर कर सकते है |
- किसी एड्रेस के साथ इन्टिजर वैल्यू को जोड़ने या घटाने पर जो वैल्यू प्राप्त होती है वो भी एक एड्रेस होता है |
- Address + Address = illegal
- Address * Address = illegal
- Address % Address = illegal
- Address / Address = illegal
- Address & Address = illegal
- Address ^ Address = illegal
- Address | Address = illegal
- ~Address = illegal
तो दोस्तों ये थे pointer arithmetic ऑपरेशन परफॉर्म करने से सम्बंधित कुछ रूल्स, जिसे आपको हमेशा अपने ध्यान में रखना है |
वैसे नीचे मैंने एक वीडियो दिया है जिसे आप एक बार जरुरु देख ले | इस वीडियो में पॉइंटर अरिथमेटिक के बारे में बड़े अच्छे से बताया गया है |
Read More -:
- Introduction of Pointer in C In Hindi
- Address Operator (&) In C In Hindi
- Indirection Operator(*) In C In Hindi
- Pointer to Pointer in C In Hindi
- Pointer to Structure In C In Hindi
- Dangling Pointer in C In Hindi
- Wild Pointer In C In Hindi
- Null Pointer In C In Hindi
- Void Pointer In C In Hindi
- Dynamic Memory Allocation in C In Hindi
Conclusion
दोस्तों आशा करता हु कि आज के इस आर्टिकल को पढ़ने के बाद आपको Pointer Arithmetic क्या है? (What is Pointer Arithmetic In C In Hindi) और सी लैंग्वेज में Pointer Arithmetic का क्या उपयोग है? से संबंधित सभी जानकारी मिल गई होगी |
अगर आप सी लैंग्वेज के Complete Notes चाहते है तो मेरे इस पोस्ट C Language Notes In Hindi को देखे यहाँ आपको C Programming Language के सभी टॉपिक्स step by step मिल जाएगी |
दोस्तों आशा करता हु कि आपको ये पोस्ट पसंद आई होगी और अगर आपको ये पोस्ट पसंद आया है तो इस पोस्ट को अपने अपने दोस्तों को शेयर करना न भूलिएगा ताकि उनको भी Pointer Arithmetic क्या है? (What is Pointer Arithmetic In C In Hindi) से संबंधित जानकारी प्राप्त हो सके |
अगर आपको अभी भी Pointer Arithmetic In C In Hindi से संबंधित कोई भी प्रश्न या Doubt है तो आप जरूर बताये मैं आपके सभी सवालों का जवाब दूँगा और ज्यादा जानकारी के लिए आप हमसे संपर्क कर सकते है |
ऐसे ही नयी टेक्नोलॉजी ,Programming Language, Coding , C Language, C++, Python Course , Java Tutorial से रिलेटेड जानकारियाँ पाने के लिए हमारे इस वेबसाइट को सब्सक्राइब कर दीजिए | जिससे हमारी आने वाली नई पोस्ट की सूचनाएं जल्दी प्राप्त होगी |