https://www.rakeshmgs.in/search/label/Template
https://www.rakeshmgs.in

Learn in Hindi

RakeshMgs

Arithmetic Pointer in C Programming In HIndi

शनिवार, मार्च 20, 2021

Pointer Arithmetic

यदि आप pointer की पूरी जानकारी चाहते हैं, तो समझने के लिए pointer arithmetic बहुत महत्वपूर्ण है। इस विषय में हम यह अध्ययन करेंगे कि जब आप increment in pointer to memory address कैसे बदलते हैं।

16 bit Machine (Turbo C)

एक 16 बिट मशीन में, सभी प्रकार के पॉइंटर size, int*, float*, char* या double* हमेशा 2 bytes होता है। लेकिन जब हम किसी arithmetic function जैसे किसी pointer पर कार्य करते हैं, तो उनके आदिम data type के size के अनुसार परिवर्तन होते हैं।

Size of datatypes on 16-bit Machine:


Examples for Pointer Arithmetic

अब कुछ उदाहरण लेते हैं और इसे और अधिक स्पष्ट रूप से समझते हैं।

	
	
int* i; i++;

उपरोक्त मामले में, pointer 2 bytes का होगा। और जब हम इसे बढ़ाते हैं, तो यह 2 bytes बढ़ाएगा क्योंकि int भी 2 bytes का होता है।

	
	
float* i; i++;

इस case में, size of poiter अभी भी शुरू में 2 bytes है। लेकिन अब जब हम इसे बढ़ाते हैं, तो यह 4 बाइट्स बढ़ाएगा क्योंकि float data type 4 bytes का होता है।

	
	
double* i; i++;

32 bit Machine (Visual Basic C++)

pointer arithmetic की अवधारणा एक समान रहती है, लेकिन एक 32-बिट मशीन में pointer और विभिन्न data types का size भिन्न होता है। 32-बिट machine में पॉइंटर 4 बाइट्स का होता है।

और, 32-Bit Machine में data types के size के लिए एक table निम्नलिखित है

Note: हम दो pointer नहीं जोड़ सकते। इसका कारण यह है कि पॉइंटर्स में address होते हैं, दो address को जोड़ने से कोई मतलब नहीं है क्योंकि आपको पता नहीं है कि new address यह क्या point करेगा।
लेकिन हम दो pointers को घटा सकते हैं। ऐसा इसलिए है क्योंकि दो pointers के बीच का अंतर इसके data types के elements की संख्या देता है जिन्हें दो pointers के बीच store किया जा सकता है।

Program for pointer arithmetic(32-bit machine)

	
	
#include <stdio.h> int main() { int m = 5, n = 10, o = 0; int *p1; int *p2; int *p3; p1 = &m; //printing the address of m p2 = &n; //printing the address of n printf("p1 = %d\n", p1); printf("p2 = %d\n", p2); o = *p1+*p2; printf( "*p1+*p2 = %d\n", o); //point 1 p3 = p1-p2; printf( "p1 - p2 = %d\n", p3); //point 2 p1++; printf( "p1++ = %d\n", p1); //point 3 p2--; printf( "p2-- = %d\n", p2); //point 4 //Below line will give ERROR printf( "p1+p2 = %d\n", p1+p2); //point 5 return 0; }

output

p1 = 2680016
p2 = 2680012
*p1+*p2 = 15
p1-p2 = 1
p1++ = 2680020
p2-- = 2680008

Explanation of the above program:

  1. यहाँ, * का अर्थ है 'value at the given address'। इस प्रकार, यह m और n का मान जोड़ता है जो 15 है।
  2. यह दो variables के address को घटाता है और फिर इसे pointer data type (यहां integer, जिसमें 4 बाइट्स का size होता है)जो हमें integer data type के elements की संख्या प्रदान करता है जिन्हें इसके भीतर stored किया जा सकता है।
  3. यह पॉइंटर के आकार (यहाँ 4) द्वारा पॉइंटर द्वारा संग्रहीत address को बढ़ाता है।
  4. यह पॉइंटर के आकार (यहाँ 4) द्वारा pointer द्वारा संग्रहीत address को घटाता है।
  5. दो pointers के जोड़ की allowed नहीं है।