Dark Mode Logo (Optional)

Dark Mode Logo (Optional)

Array in Function through Pointer


 


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 बना सकते हैं |   


You may like these posts:

No comments:

Post a Comment