Sunday, March 16.

Header Ads

Colorful+Black+Friday+Discount+Leaderboard+Ad

Automatic Storage Class

Muscle+Inc.+%25282%2529

.com/img/a/

Automatic Storage Class

जब हम किसी Variable के Declaration से पूर्व Storage Class के रूप में auto keyword का प्रयोग करते हैं , तो वह Variable Automatic Storage Class में Store होता है | Automatic Storage Class के Variables , Local Variables होते है | इनका उपयोग वही किया किया जा सकता है जिस Function में इनको Declare किया गया है |

जैसे ही Program Control उस Function से बाहर निकलता है , जिसमें ये Variable Declare किया गया है , तो Program Control के उस Function से बाहर निकलते ही उस Variable का मान नष्ट हो जाता है | जब हम किसी Function में Variable Declare करते हैं , और उसके साथ किसी भी Storage Class का प्रयोग नहीं करते है , तो “C” Compiler उसे Default रूप से Automatic Storage Class का मान लेता है | जैसे

auto int num = 0 int num =0

इन दोनों ही Declaration का अर्थ समान ही है | Automatic Class की एक खास बात ये भी है कि यदि एक ही नाम के कई Variables के ही प्रोग्राम में विभन्न Function में Declare किये जाएं और हर Function में Variable को भिन्न मान प्रदान किया जाए , तो भी Program Control इसे मान्य करता है |

क्योंकि एक main() Function के अंदर लिखें गए विभन्न User Defined Function में Variable का नाम समान होने पर भी , यदि UDF में उस समान नाम वाले Variable का मान परिवर्तन हो रहा हो तो भी main() Function में उस परिवर्तन का कोई फर्क नहीं पड़ता है | हम यही बात एक प्रोग्राम द्वारा समझाने कि कोशिश  करते हैं |

 

Program


#include<stdio.h>
main()
{
	auto int num=6;
	{
	
	{
		printf("%d",num);
	}
	 printf("%d",num);
	}
	printf("%d",num);
 getch();
}


Output
666

इस प्रोग्राम के Output में 666 प्राप्त हुआ | इस प्रोग्राम में हर Block में एक printf() Function है , जो num के मान को print कर रहा है | जब Program control प्रथम Statement Block में प्रवेश करता है , तो वहां उसे दूसरा Statement Block प्राप्त होता है | .यहां num नाम के Variable में Store मान को Print करने का Statement लिखा है , जो main() Function में लिखें num के मान 6 को print कर देता है |

फिर Program Control इस Statement Block से बाहर आता है | यहां वापस उसे एक Printf() Function मिलता है और वापस num नाम के Variable का मान print किया जाता है |

Variable में जब Program Control इस Statement Block से भी बाहर निकलता है , तब उसे main() Function में लिखा printf() Function प्राप्त होता है | वापस num का मान 6 print हो जाता है |

इस प्रकार तीनों Block में num का मान 6 ही print हुआ क्योंकि हर Statement Block main() Function में लिखें num के मान को ही Print कर रहा है | जबकि नीचें लिखे इसी प्रोग्राम में थोडा सा बदलाव करने से  Output में हमें भिन्न – भिन्न संख्याएं प्राप्त हो रही है |

Program


#include<stdio.h>
main()
{
	auto int num=6;
	{
		auto int num=8;
		{
			auto int num=1;
			printf("%d",num);
		}
		printf("%d",num);
	}
	printf("%d",num);
	getch();
}


Output
186

इस प्रोग्राम को Execute करने पर हमें 186 Output प्राप्त होता है | आइये समझने की कोशिश करते हैं कि ऐसा क्यों हुआ | जब प्रोग्राम Control main() Function में पहुंचता है , तो वहां num नाम के एक Variable को Declare करता है और उसका मान 6 Initialize करता है | फिर Program Control आगे बढ़ता है, तब उसे एक Statement Block प्राप्त होता है |

इस Statement Block में पहुँचते ही Program Control को वापस एक auto Storage Class का Variable num प्राप्त होता है | “C” Compiler इसे भी Memory में जगह देता है और इसका प्रारम्भिक मान 8 Initialize करता है | Program Control इसमें आगे बढ़ता है , तो वापस उसे एक Statement Block प्राप्त होता है और यहां वापस एक auto Storage Class का Variable num Declare करता है और इसे मान 1 Assign करता है |

इसी Statement Block में अगला Statement है , जिसमें Printf() Function द्वरा num के मान को Print किया गया है | num का मान तो तीनों Blocks में भिन्न है तो फिर कौनसा मान Output  में Print होगा ?

यहां अंक 1 Output में print हो रहा है | ऐसा इलिए हो रहा है ,क्योंकि किसी भी प्रोग्राम के किसी भी function में जब किसी Variable के मान को Print करवाया जाता है तो “C” Compiler सर्वप्रथम दिए  गए Variable के नाम को Local Variables में ढूँढता है और यदि Local Variables में उस नाम का Variable नहीं मिलता , तब Program control उसी प्रोग्राम में कहीं और यानी उस Statement Block या Function से बाहर  उस नाम के Variable को ढूँढता है और जहां उस नाम का Variable प्राप्त हो जाता है , वही का मान Output में Print कर देता है |

ध्यान दें कि यह Variable ढूँढने का क्रम Inner Block से Outer block की ओर चलता है |  यानी यदि हमारे Program में हम किसी Statement Block में है और वहां किसी Variable का मान Print करवा रहें हैं , तो सर्वप्रथम  Program control चौथे Statement Block में उस Variable को ढूंढेगा | यदि Program Control को चौथे Statement block में वह Variable प्राप्त नहीं होता , तो Program Control तीसरे Statement Block में उस Variable को खोजेगा |

यदि तीसरे में भी वह Variable  प्राप्त न हो तो दूसरे Statement Block में उस Variable को खोजेगा और यदि यहां भी उसे वह Variable प्राप्त न हो तो अंत में Program control main() Function में उस Variable को खोजेगा | इस क्रम में जहां भी पहले वह Variable प्राप्त हो जाएगा Program Control वही के मान को उस चौथे Inner Block द्वारा Output में Print कर देगा |

इसी कारण से ऊपर बताये गए प्रथम प्रोग्राम में तीनों Statement Blocks में num का मान 6 ही Print हुआ है | लेकिन इस प्रोग्राम में ऐसा नहीं हुआ है | क्योंकि इस प्रोग्राम में हर Statement Block में num नाम का एक Variable Declare किया गया है , जो कि  उस Statement Block के लिए एक Local Variable है और जैसा कि हमने अभी कहा कि जब Program control को किसी Variable के मान के साथ प्रक्रिया करनी होती है , तो सर्वप्रथम Program Control उस Variable को Local Variables में खोजता है |

यहां दूसरे Statement Block में num का मान 1 Assign किया गया है और इसी Block में num को print किया गया है , इसलिए यहां num का मान 1 ही Output में Print हो रहा है | इस Statement Block के अलावा जो दो अन्य Variables हैं , जिनका नाम भी num ही है | Statement Block से  बाहर होने के कारण इस Statement Block के लिए वे num Global Variable हो गए हैं | यदि हम इस तीसरे Statement Block में num को Declare नहीं करते और num को Print करते तो Program Control Outer  Statement Block के num के मान 8 को Output में Print कर देता और हमारा  Output 886 प्राप्त होता |

इसी प्रकार  जब Program Control इस Statement Block से बाहर आता है , तब उसे यदि Print() Function प्राप्त होता है और यहां Output में num का मान 8 Print होता है , क्योंकि इस Statement Block में भी num नाम का एक Local Variable Declare  किया गया है , जिसका  मान 8 दिया गया है | यदि यहां पर ये Variable Declare नहीं करते तो Output में यहां 8 की बजाये 6 Print होता और हमारा Output 166 होता |

 

No comments

Post Top Ad

Post Bottom Ad