Read in Hindi
Read in English

Going forward with this C/C++ programming language tutorial today we will know more about pointer.
Last time we have seen example of int pointer, but pointer can be of any datatype. It can even be struct. Lets see example of struct pointer here. If you do not know how to use struct then Read this C/C++ struct.
#include <stdio.h>

struct rectangle {
  int width;
  int length;
};

int main() {
  struct rectangle r1;
  r1.width = 10;
  r1.length = 15;

  struct rectangle* r2;
  r2 = &r1;
  printf("Original width=%d, length=%d\n", (*r2).width, (*r2).length);

  r1.width = 20;
  r1.length = 25;
  printf("r1 changed, width=%d, length=%d\n", (*r2).width, (*r2).length);

  (*r2).width = 5;
  (*r2).length = 10;
  printf("*r2 changed, width=%d, length=%d\n", r1.width, r1.length);
  return 0;
}

Run the example given above, we will understand output here. In main we have defined variable r1 of type struct rectangle 1st and declared pointer r2 which can store address of any struct rectangle. We have assigned address of r1 in that pointer. Now r1 is a variable and r2 is a pointer which has address of r1 hence if we change value of r1 then reading value from r2 will give changed value. Similarly if we change value through r2 value change then reading from r1 will give changed value.

See the example given above carefully. r2 is address(pointer) of r1, hence *r2 will give struct rectangle(*r2 and r1 is same. hence (*r2).width and r1.width is also same, changing one will be reflected on other.)
Important Note about pointer
1. shortcut for writing (*r2).width is r2->width. In program in place of (*r2).width, r2->width and in place of (*r2).length, r2->length can also be written. Replace this in program above and run to see output.
2. Declaring any variable any value have not assigned(as in int x;) defining means assigning value also(as in int x=1;) if you have just declared pointer and not assigned any address, then reading value from that pointer(using * as in *r2) will crash the program and it will give segmentation fault.
आज Hindi के इस C/C++ programming language tutorial को आगे बढ़ाते हुए हम pointer के बारे में और जानेंगे.
पिछली बार हमने इस C/C++ programming language tutorial में int pointer का example देखा था परन्तु pointer किसी भी datatype का हो सकता है. struct का भी pointer हो सकता है. हम struct pointer का एक example देखते हैं. अगर आपको struct का use करना नहीं आता तो पहले इसे पढ़ लें. C/C++ struct hindi में पढ़ने के लिए यहाँ click करें.
#include <stdio.h>

struct rectangle {
  int width;
  int length;
};

int main() {
  struct rectangle r1;
  r1.width = 10;
  r1.length = 15;

  struct rectangle* r2;
  r2 = &r1;
  printf("Original width=%d, length=%d\n", (*r2).width, (*r2).length);

  r1.width = 20;
  r1.length = 25;
  printf("r1 changed, width=%d, length=%d\n", (*r2).width, (*r2).length);

  (*r2).width = 5;
  (*r2).length = 10;
  printf("*r2 changed, width=%d, length=%d\n", r1.width, r1.length);
  return 0;
}

ऊपर दिए C/C++ program को चला कर देख लें. उसका output यहाँ समझते हैं. main में हमने पहले struct rectangle type का variable r1 define किया है और pointer r2 declare किया है जो struct rectangle का address store कर सकता है. उसमे r1 का address डाल दिया गया है. अब r1 एक variable है और r2 pointer है जिसमे r1 का address है इसलिए अगर हम r1 में value change करते हैं तो r2 से value read करने पर changed value मिलेगी. इसी तरह r2 में value change करते हैं तो r1 से read करने पार changed value मिलेगी.

ऊपर दिए गए program को ध्यान से देखिये. r2 address(pointer) है r1 का, इसलिए *r2 हमें struct rectangle देगा(pointer वाले address की value * लगाने पर आती है इसलिए *r2 और r1 एक ही हैं. इसी तरह (*r2).width और r1.width भी एक ही हैं दोनों में से किसी एक को change करने पर दूसरा भी change हो जाता है.)
Important Note about pointer
1. (*r2).width लिखने का shortcut r2->width भी होता है. program मे (*r2).width की जगह r2->width और (*r2).length कि जगह r2->length भी लिख सकते हैं. आप ऊपर दिए गए program में यह लिखकर चलाकर देखें.
2. कोई भी variable declare करने का मतलब है कि उसमे कोई value नहीं डाली(जैसे int x;) और define करने का मतलब है कि उसमे value भी डाल दी है(जैसे int x=1;) अगर आपने pointer सिर्फ declare किया है और उसमे किसी variable का address नहीं डाला तो उससे value read करने में(* का use करके जैसे *r2) program crash हो जायेगा और segmentation fault दे देगा.
आज के लिए इतना ही. अभी pointer के बारे में बहुत कुछ जानना बाकी है.