Read in Hindi
Read in English

Going forward with this C/C++ programming language tutorial we will know more about pointer.
See the example given below and think for a while what it will print. you may wonder to see the actual output.

#include <stdio.h>

void add1(int i) {
  i = i + 1;
}

int main() {
  int x = 5;
  printf("before adding x = %d \n", x);
  add1(x);
  printf("after adding x = %d \n", x);

  scanf("%d", &x);
  return 1;
}

It will give the following output when run.
before adding x = 5 
after adding x = 5 
Now lets see why it gives this output. If you see add1 function, it is increasing value of parameter passed to it. In main value of x is 5 hence 1st time it prints x = 5 print. Then x is passed to add1 function, hence value of x should be increased by 1. but its value is still 5 hence 5 is printed again not 6.

Reason for this is that when ad1 function was called, it made separate copy of parameter x. add1 function changed value of copy, not original hence original x is still same.

When a is function called, a separate copy is made for all the parameters passed to it and that copy is given to called function. hence if called function changes values of parameters, it changes only copy, not original parameters.

Now see the C++ program given below which uses pointer and think what will be output.
#include <stdio.h>

void add1(int* i) {
  *i = *i + 1;
}

int main() {
  int x = 5;
  printf("before adding x = %d \n", x);
  add1(&x);
  printf("after adding x = %d \n", x);

  scanf("%d", &x);
  return 1;
}
It will give the output -
before adding x = 5 
after adding x = 6 
Now lets understand this why value value of x changes after function call. Here add1 function does not take int variable but address of int variable. It goes to that address that increases value stored at that address.
In main when add1 function is called, address of x is passed to it.As explained above, it will make copy of address of x that will be given to add1 function. If add1 function changes address given to it then value of x will not change but this function changes value stored in that address. Be it original address or copy of address, it will remain address of given variable, hence if we change value stored in address then value of original variable will also be changed
Later we will know more about pointer.
आज Hindi के इस C/C++ programming language tutorial को आगे बढ़ाते हुए हम pointer के बारे में और जानेंगे.
नीचे दिए गए इस example को देखिये और सोचिये कि यह क्या print करेगा, आपको इसका actual output देखकर आश्चर्य होगा.

#include <stdio.h>

void add1(int i) {
  i = i + 1;
}

int main() {
  int x = 5;
  printf("before adding x = %d \n", x);
  add1(x);
  printf("after adding x = %d \n", x);

  scanf("%d", &x);
  return 1;
}

run करने पर इसका output यह आएगा.
before adding x = 5 
after adding x = 5 
अब समझते हैं कि यह output क्यों आ रहा है. अगर आप add1 function देखेंगे तो उसमे जो parameter(argument) pass किया जाता है उसकी value 1 बढ़ा रहा है. main में पहले x की value 5 है इसलिए पहली बार x = 5 print हुआ है. उसके बाद add1 function में x को pass किया है इसलिए x की value 1 बढ़ जाना चाहिए परन्तु उसकी value 5 ही है और इसीलिए बाद में भी x = 5 ही print हो रहा है.

इसका कारण यह है कि जब add1 function call हुआ तो उसमे pass किये गए variable x की एक अलग copy बन गयी, add1 function ने उस copy की value change की है, इसलिए original x की value change नहीं हुई.

जब भी कोई function call होता है उसमे pass किये गए variable की copy बन जाती है और वह copy call किये गए function को दी जाती है. इसलिए call किया गया function अगर arguments की value change करता है तो original variable की value change नहीं होती, copy की value change होती है.

अब नीचे वाला C++ program देखिये जो pointer का use करके लिखा गया है और सोचिये कि इसका output क्या होगा
#include <stdio.h>

void add1(int* i) {
  *i = *i + 1;
}

int main() {
  int x = 5;
  printf("before adding x = %d \n", x);
  add1(&x);
  printf("after adding x = %d \n", x);

  scanf("%d", &x);
  return 1;
}
run करने पर इसका output यह आएगा.
before adding x = 5 
after adding x = 6 
अब इसे समझते हैं कि यहाँ function call करने पर x की value बढ़ क्यों गयी. यहाँ add1 function int नहीं लेता बल्कि int variable का address लेता है, और उस address पर जो भी value होती है उसे 1 बढ़ा देता है.
main में जब add1 function को call किया है तो उसमे x का address pass किया है. ऊपर बताये गए अनुसार x के address की एक copy बनेगी जो add1 function को दी जायेगी. अगर add1 function address को change करता तो x की value change नहीं होती पर add1 function उस address में store variable की value change कर रहा है. चाहे वह original address हो या address की copy, address तो उसी variable का ही रहेगा, इसलिए अगर हम उस address पर store variable को change करते हैं original variable भी change हो जायेगा.

अभी pointer के बारे में और जानना भी बाकी है. इसलिए आगे के लेखों का wait करें.