Sunday, March 16.

Header Ads

Colorful+Black+Friday+Discount+Leaderboard+Ad

Array in Function through Pointer

Muscle+Inc.+%25282%2529

 

Array%20in%20Function%20through%20Pointer

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

Post Top Ad

Post Bottom Ad