Array in Function through Pointer
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWdTd_834yizuBajhRoVP61_b4sa9vPvMjKrwpKIh1NGTrHhWW0PtLmTIDRiustqUsrwQcgny0P5q99xuBDmrki5QwnBESfc4AuLv33rHRwQm6_9wuLHqot6eclNZRiJNzLr5JfeXBgFobC0PczvtTghnpanRngpQjAuhNjdclvtGf1StbcT9bSFe1/w640-h480/Array%20in%20Function%20through%20Pointer.jpg)
Array in Function
through Pointer
Function को
पढते समय हमने देखा था कि किस प्रकार से एक Array को Function
के साथ उपयोग में लाया जा सकता है |
यहां
हम ये जानेंगे कि किसी Array को Pointer द्वारा किस प्रकार से किसी Function में Argument
के रूप में भेजा जा सकता है |
Pointer
की ये विशेषता है कि यदि किसी Variable को Pointer
द्वारा Function में भेजा जाता है , तो Argument
के रूप में Array का Base Address ही Function को Pass होता है |
यदि एक सामान्य Formal
Variable में इस argument को Accept किया जाए तो ये Array का सामान्य तरह से उपयोग करना
होता है , लेकिन यदि उस Base Address को किसी ऐसे Formal
Variable में Accept किया जाए तो खुद एक Pointer
Variable हो तो ये Array का Pointer हो जाता है | इसे
समझने के लिए निम्न प्रोग्राम देखते हैं |
Program
#include<stdio.h>
main()
{
int j[] = { 11,23,33,22,44,55,66};
clrscr();
display ( &j[0], 6 );
}
display ( int *m, int n )
{
int k;
for( k = 0; k < 5; k++ )
{
printf(“\t Element = %d “, *m );
m++; //Increment Pointer to Point next Location
}
}
Output
Element =11
Element =23
Element =33
Element =22
Element =44
Element =55
इस प्रोग्राम में
Array
j का Base Address व इसकी Size को Argument के रूप में display() नाम के Function में भेजा गया है |
जो
कि क्रमशः *m व n के Formal
Argument को प्राप्त हो गए है जिन्हें User Defined Function
में main() Function से आ रहे Arguments
को Accept करने के लिए Declare किया गया है |
ध्यान दें कि Variable
m को Pointer Variable Declare किया गया है ,
लेकिन Argument के रूप में Array का Base
Address आ रहा है और Address को केवल Pointer
Variable ही ग्रहण कर सकता है |
जब
display()
Function का for Loop चलता है तब प्रथम Iteration
में Variable m में प्राप्त Base Address
के मान को Print कर देता है |
फिर
m
का नाम Increment किया गया है |
इससे m
का Address दूसरे Element के Address पर पहुंच जाता है और दूसरे मान को Output
में Print कर देता है |
ये
क्रम 6
बार चलता है क्योंकि Variable n में Array
की Size 6 Argument के रूप में main() से प्राप्त होती है और for Loop को तब तक चलाया गया
है जब तक कि n का मान 6 ना हो जाए |
इस
प्रकार से एक Array को Pointer के
साथ User Defined Function में भेजा जा सकता है व
आवश्यकतानुसार उपयोग में लाया जा सकता है |
एक Variable
की तरह ही एक Function का भी Memory में एक Location Address होता है |
यानी
एक Variable
की तरह ही Function भी Memory में किसी Storage Cell में जा कर Store होता है और उस Storage Cell का कोई Address होता है |
इस कारण से एक Pointer
को किसी Function का Address प्रदान करके Function Pointer की तरह भी Declare
किया जा सकता है , जिसे आवश्यकता के अनुसार बाद में किसी अन्य Function
में Argument के रूप में Use किया जा सकता है | जब
एक Pointer
को किसी Function को Point करना होता है , तब उस Function Pointer को
निम्नानुसार तरीके से Declare करना पड़ता है |
Data Type (*Function_Pointer_Name) ();
ये Declaration
“C” Compiler को बताता है कि Function_Pointer_Name एक Pointer का नाम है जिसमें किसी Function का Address Store किया जा सकता है और ये Function_Pointer_Name
Data Type प्रकार का मान Return करेगा |
यहां ये बात
हमेंशा ध्यान रखें कि किसी Function को Point
करने के लिए जो Pointer Declare किया जाता है
, उसे हमेंशा कोष्टक के अंदर ही लिखना जरुरी होता है |
यानी
Function
Pointer का नाम हमेंशा कोष्टक के अंदर ही लिखना जरुरी होता है |
यानी
Function
Pointer का नाम हमेंशा कोष्टक में लिखा जाना चाहिए |
माना
हमने Function
Pointer का Declaration निम्नानुसार किया है |
Data Type * Function_Pointer_Name();
ये Declaration
“C” Compiler को ये बताएगा कि Function_Pointer_Name एक Function है , जो कि Data Type प्रकार का एक Pointer Returns करेगा |
यानी
ये Declaration
किसी Function का Pointer नहीं होगा बल्कि Function_Pointer_Name नाम का एक Function
होगा जो कि Data Type प्रकार का एक Pointer
Returns करेगा | Function
Pointer को Declare करने का एक उदाहरण देखते
हैं |
हमने Function
Chapter के अंतर्गत sum() Function का प्रयोग
किया है | आईये इस sum()
Function को एक Pointer Function द्वारा Use
करते हैं |
int ( * sumptr) () , sum();
sumptr = sum;
यहां sum()
एक Function है और *sumptr एक Function का Pointer है |
दूसरे
Statement
में इस Function Pointer sumptr() को sum()
नाम के Function का Address प्रदान किया गया है | sum
int प्रकार का मान Return करेगा इसलिए sumptr
को भी int प्रकार का Declare किया गया है , क्योंकि हम जानते है कि एक Pointer को
उसी Data Type का Declare किया जाना
जरुरी होता है , जिस Data Type का हम उसके Variable में मान Store करते हैं |
इसी वजह से यहां
दोनों को int प्रकार का Declare किया गया है | अब
हम sum()
Function का उसके नाम sum() के बजाय उसके Pointer
sumptr द्वारा भी Access कर सकते हैं |
यानी
अब हम Function
sum() को Call करने के लिए इसके Pointer
sumptr को Argument List के साथ Use कर सकते हैं | जैसे
(*sumptr) (x,y)
इसकी जगह हम
निम्न Statement
का भी प्रयोग कर सकते हैं |
sum (x,y)
ये दोनों ही Statements
समान Output प्रदान करेंगे |
केवल
इनके काम करने के तरीके में अंतर होगा | ये
सवाल हमारे दिमाग में आ सकता है , कि जब हम एक साधारण तरीके से किसी Function
को प्रयोग कर सकते हैं , तो फिर ये तरीका क्यों Use किया जाये | इसका
जवाब ये है कि Functions को इस प्रकार से Use करके हम Memory Resident Programs लिख सकते हैं और Computer
Virus व Virus Vaccines बना सकते हैं |
No comments