Pointer Arithmetic क्या है? – What is 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)

पॉइंटर अरिथमेटिक क्या है? (What is Pointer Arithmetic In C In Hindi)

जैसे की हम जानते है, पॉइंटर एक ऐसा वेरिएबल है जो दूसरे वेरिएबल का एड्रेस कॉन्टैन करता है और चूँकि पॉइंटर भी एक वेरिएबल है इसलिए इसका भी एक एड्रेस होता है | इस एड्रेस को हम अरिथमेटिक ऑपरेशन (addition, subtraction आदि) द्दारा manipulate कर सकते है और जब हम ऐसा करते है तो इसे ही Pointer Arithmetic कहते है | 

Pointer arithmetic नार्मल arithmetic (जिसे हम आम तौर पर अपने दैनिक जीवन में उपयोग करते हैं) से थोड़ा अलग है। 

सी लैंग्वेज हमे Pointer Arithmetic operations के लिए कुछ set of operators प्रोवाइड करती है जो की निम्न है -:

  1. Increment
  2. Decrement
  3. Addition
  4. Subtraction
  5. 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 ExpressionHow it is evaluated ?
ip = ip + 1ip => ip + 1 => 1000 + 1*4 => 1004
ip++ or ++ipip++ => ip + 1 => 1004 + 1*4 => 1008

Pointer Arithmetic on Float

Pointer ExpressionHow it is evaluated ?
dp + 1dp = dp + 1 => 2000 + 1*8 => 2008
dp++ or ++dpdp++ => dp+1 => 2008+1*8 => 2016

Pointer Arithmetic on Characters 

Pointer ExpressionHow it is evaluated ?
cp + 1cp = cp + 1 => 3000 + 1*1 => 3001
cp++ or ++cpcp => 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 ExpressionHow it is evaluated?
ip– or –ipip => ip – 1 => 1000 – 1*4 => 996
dp– or –dpdp => dp – 1=>2000 – 1*8=>1992`
cp– or –cpcp => 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 ऑपरेशन परफॉर्म करने से सम्बंधित कुछ रूल्स, जिसे आपको हमेशा अपने ध्यान में रखना है | 

वैसे नीचे मैंने एक वीडियो दिया है जिसे आप एक बार जरुरु देख ले | इस वीडियो में पॉइंटर अरिथमेटिक के बारे में बड़े अच्छे से बताया गया है | 

Conclusion 

दोस्तों आशा करता हु कि आज के इस आर्टिकल को पढ़ने के बाद आपको Pointer Arithmetic क्या है? (What is Pointer Arithmetic In C In Hindi) और सी लैंग्वेज में Pointer Arithmetic का क्या उपयोग है? से संबंधित सभी जानकारी मिल गई होगी |

अगर आप सी लैंग्वेज का Complete Tutorial चाहते है तो मेरे इस पोस्ट C Language Tutorial 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 से रिलेटेड जानकारियाँ पाने के लिए हमारे इस वेबसाइट को सब्सक्राइब कर दीजिए | जिससे हमारी आने वाली नई पोस्ट की सूचनाएं जल्दी प्राप्त होगी |

Jeetu Sahu is A Web Developer | Computer Engineer | Passionate about Coding, Competitive Programming and Blogging

Leave a Comment