Nested Structure – Structure within Structure

C Programming Language in Hindi - BccFalna.com ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook  C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C Programming Language in Hindi | Page: 477 + 265 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

Nested Structure: हम एक Structure में दूसरे Structure को भी प्रयोग कर सकते हैं। जब हम किसी Structure के Block में एक और Structure का प्रयोग करते हैं, तो इस प्रकार की प्रक्रिया को Nesting of Structure या Structure within Structure कहते हैं। इसे समझने के लिए यहां एक Structure बनाया जा रहा है, जिसमें किसी Employee की salary को Store किया जाएगा।

// Structure
struct salary
{
	char name[20];
	char department[30];
	int basic;
	int dearness_allowance;
	int house_rent_allowance;
	int city_allowance;
}employee;

ये एक सामान्‍य Structure है। हम देख सकते हैं कि इसमें Allowance से सम्बंधित तीन Members हैं। यदि हम इन तीनों Members को इसी Structure के अंदर एक अन्‍य Structure बना कर उसके Member बना दें तो Outer Structure के लिए Inner Structure allowance एक Member होगा और ये allowance स्वयं एक Structure है जो कि Outer Structure salary का एक Member है। यानी हम ये कह सकते हैं कि salary नाम का एक Structure है, जिसमें allowance नाम का एक Member है और allowance खुद एक Structure है, जिसके अपने तीन Member हैं।

// Nested Structure
struct salary
{
	char name[20];char
	department[30];
	int basic;
	struct 
	{
		int dearness_allowance;
		int house_rent_allowance;
		int city_allowance;
	}allowance;
}employee;

यहां salary एक Structure है, जिसके चार Members क्रमश: name, department, basicallowance हैं और इसी Structure के अंदर allowance नाम का एक और Structure है, जिसके तीन Member क्रमश: dearness_allowance, house_rent_allowancecity_allowance हैं। यानी इस Structure में allowance दो काम कर रहा है। Outer Structure के लिए वह एक Member है, जबकि Structure के अंदर वह स्वयं एक Inner Structure है, जिसके अपने तीन Members हैं। इस प्रकार ये Structure salary एक Nested Structure का उदाहरण है।

जिस प्रकार हम एक Structure के बाहर Structure प्रकार के Variable Declare करते हैं, उसी प्रकार से allowance के भी Variable Declare कर सकते हैं। यहां Nested Structure का एक उदाहरण दिया जा रहा है। इस उदाहरण में दो विधार्थीयों के नाम व उनके तीन विषयों में प्राप्त अंको को Store किया गया हैं व Output में वापस Print किया गया है।

इस उदाहरण में stud नाम का एक Structure बनाया गया है। इसमें एक और Inner Structure बनाया गया है, जिसमें तीन विषयों के मान Store करने के लिए तीन Member हैं। ये Inner Structure, Outer Structure का Member है।

Inner Structure का एक Variable marks है, जिससे इस Inner Structure के Members को access किया जा सकता है। Outer Structure के दो Variables दो Students को Represent कर रहे हैं, जिनका नाम क्रमश: stud1 व stud2 है। ये दोनों Variables Outer Structure stud प्रकार के हैं।

// Program
#include<stdio.h>
main() 
{
	struct stud 
	{
		char name[15];
		int ro_no;
		struct
		{
			int sub1;
			int sub2;
			int sub3;
		}marks;
	};

	struct stud stud1,stud2;

	clrscr();

	printf("\n Enter name of stud1 ");
	scanf("%s", stud1.name);

	printf("\n Enter roll number of stud1 ");
	scanf("%d",&stud1.ro_no);

	printf("\n Enter Marks of sub1 ");
	scanf("%d",&stud1.marks.sub1);

	printf("\n Enter Marks of sub2 ");
	scanf("%d",&stud1.marks.sub2);

	printf("\n Enter Marks of sub3 ");
	scanf("%d",&stud1.marks.sub3);
	clrscr();

	printf("\n Name  of Student1 is %s ", stud1.name);
	printf("\n Ro No of Student1 is %d ", stud1.ro_no);
	printf("\n Marks of Subject1 is %d ", stud1.marks.sub1);
	printf("\n Marks of Subject2 is %d ", stud1.marks.sub2);
	printf("\n Marks of Subject3 is %d ", stud1.marks.sub3);

	getch();
}

जब इस प्रोग्राम को Execute किया जाता है, तब सभी प्रकार के Variables व Structure के Declaration के बाद Enter name of stud1 Message  आता है। जब हम नाम Input करते हैं, तो वह नाम Structure प्रकार के Variable, जो कि Structure stud प्रकार का एक Variable है, के मा/यम से होते हुए Structure stud के Member name द्वारा Reserve की गई Memory Location पर जा कर Store हो जाता है।

ध्‍यान दें कि जब हमें Structure में कोई मान भेजना होता है या किसी Structure से कोई मान प्राप्त करना होता है, तो हमें उस मान की Location का पूरा Reference देना होता है। इस प्रकार यहां stud1.name Statement “C” Compiler को Input किये गए नाम को Store करने की पूरी Memory Location बता रहा। यह Statement Program Control को बताता है कि stud1 एक Structure प्रकार का Variable है और stud1 जिस Structure का Variable है, उसमें name नाम का एक Member है। इस Member ने Memory में 15 Byte की Character Type की Space Reserve किया है।

यानी हम इस Member में 15 अक्षरों तक की कोई String Input कर सकते हैं। इस प्रकार Input किया जाने वाला नाम stud नाम के Structure के Structure Member name में जा कर Store हो जाता है।

अब दूसरा Message “Enter roll number of stud1” हमसे विधार्थी का Roll Number मांगता है। जब हम Roll Number Input करते हैं, तो वह भी stud नाम के Structure के Member roll_no की Reserve की गई Memory Location पर जा कर Store हो जाता है। जब Program Control हमसे तीसरा मान मांगता है तो वह निम्न Statement द्वारा ये मान Nested Structure में जा कर Store कर देता है।

        &stud1.marks.sub1

यह Statement Program Control को बताता है कि stud1 एक Structure stud के प्रकार का Variable है। इस stud Structure में एक Member है, जिसका नाम marks है और ये Member स्वयं एक Structure है जिसके तीन Member हैं। sub1 उस Inner Structure marks का पहला Member है। Input किया जाने वाला मान उस Memory Location पर Store कर दो जिस Memory Location का नाम sub1 है। इस प्रकार ये मान sub1 के Memory Location पर Store हो जाता है।

इसी प्रकार अन्‍य विषयों के मान भी Memory में Input हो जाते है। इस प्रोग्राम को इतना समझाने का मकसद ये बताना है, कि हम “.” Operator की मदद से ही एक से दूसरे Structure के Members को किस प्रकार Access कर सकते हैं और “.” Operator को किस प्रकार प्रयोग किया जाता है।

एक खास बात ध्‍यान रखें कि जब हमें Inner Structure का कोई Variable Declare करना होता हैं, तो उसे Structure के मंझले कोष्‍ठक के सेमी colon से पहले ही Declare करना होता है। जैसे नीचे बताए गए प्रारूप में बताया गया हैं। इसमें Inner Structure के तीन Variable allowance, xyz व pqr हैं। ये तीनों ही Variable, Inner Structure प्रकार के हैं।

ध्‍यान से देखने पर पता चलेगा कि Inner Structure के Data Type के Variable Declare करने के लिए कोई tag नहीं है। यानी Inner Structure का Format ऐसा होता है, जिसमें कोई tag नहीं होता है। इसीलिए Inner Structure प्रकार के Variable हमें Structure बनाते समय ही Declare कर देने होते हैं। ये तीनों ही Variable Outer Structure के लिए Member मात्र हैं जबकि Inner Structure के ये Variable हैं।

// Structure Nesting
struct salary
{
	char name[20];char
	department[30];
	int basic;
	struct 
	{
		int dearness_allowance;
		int house_rent_allowance;
		int city_allowance;
	} allowance, xyz, pqr ;
}employee;

Structure की Nesting करने का एक अन्‍य तरीका भी है। इस तरीके में Nested हो रहे Structure का अपना tag भी होता है। वास्तव में हम इस तरीके में दोनों Structures को अलग-अलग ही लिखते हैं।

जिस Structure को दूसरे वाले Structure में Nested करना होता है, हम उस Structure के अंदर पहले वाले Structure के प्रकार के Variable Declare कर देते हैं, जो कि दूसरे वाले Structure के Member होते हैं। इस प्रकार जब हमें पहले वाले Structure प्रकार के Variables को Access करना होता है, तब दूसरे वाले Structure के मा/यम से हम उस Structure के Members को Access करते हैं।

यानी एक Structure प्रकार का Variable यदि दूसरे Structure में Declare किया जाएं] तो ये भी एक प्रकार की Nesting ही हो जाती है। उदाहरण के लिए ऊपर बताए गए प्रारूप पर ही हम इस प्रकार की Nesting प्रयोग कर सकते हैं।

// Structure Nesting
struct pay
{
	int dearness_allowance;
	int house_rent_allowance;
	int city_allowance;
};

struct salary
{
	char name[20];char
	department[30];
	int basic;
	struct pay allowance;
}employee;

यहां salary नाम के Structure में pay नाम के Structure प्रकार का एक Variable allowance Declare किया गया है। इस Variable को दूसरे Structure के अंदर एक Member के रूप में Declare किया गया है। इसलिए हमें जब भी इस pay नाम के Structure के Members को access करना होगा, हमें salary नाम के Structure के allowance नाम के Member को Access  करना होगा।

यानी यदि हमें Structure pay के Member को कोई मान भेजना हो या उसके किसी Member से कोई मान प्राप्त करना हो तो हमें ये काम salary नाम के Structure के Structure Member, allowance को Use करके करना होगा जबकि allowance Structure salary का एक Member है। इसलिए हम कह सकते हैं कि Structure pay Structure salary में Nested है।

यहां हम ऊपर दिये गए प्रोग्राम को ही दूसरे प्रकार से दे रहे हैं। इस प्रोग्राम में Inner Structure को हटा कर बाहर ही लिख दिया है और दूसरे Structure, जिसमें कि पहले Structure को Nested किया गया था] वही काम केवल पहले वाले Structure प्रकार के Variable को दूसरे वाले Structure में Declare करके किया गया है। जैसा कि अभी हमने उपर वाले paragraph में बताया है। इसमें बहुत कम परिवर्तन किया गया है।

// Program
#include<stdio.h>

main()
{
	struct subjects
	{
		int sub1;
		int sub2;
		int sub3;
	};
	struct stud 
	{
		char name[15];
		int ro_no;
		struct subjects marks;
	};

	struct stud stud1,stud2;
	clrscr();

	printf("\n Enter name of stud1 ");
	scanf("%s", stud1.name);
	printf("\n Enter roll number of stud1 ");
	scanf("%d",&stud1.ro_no);
	printf("\n Enter Marks of sub1 ");
	scanf("%d",&stud1.marks.sub1);
	printf("\n Enter Marks of sub2 ");
	scanf("%d",&stud1.marks.sub2);
	printf("\n Enter Marks of sub3 ");
	scanf("%d",&stud1.marks.sub3);
	printf("\n Name  of Student1 is %s ", stud1.name);
	printf("\n Ro No of Student1 is %d ", stud1.ro_no);
	printf("\n Marks of Subject1 is %d ", stud1.marks.sub1);
	printf("\n Marks of Subject2 is %d ", stud1.marks.sub2);
	printf("\n Marks of Subject3 is %d ", stud1.marks.sub3);
	getch();
}

इस प्रोग्राम का Output बिल्कुल वैसा ही प्राप्त होता है जैसा कि पहले वाले प्रोग्राम का प्राप्त होता है।

Array in Structure
Structure with Function

C Programming Language in Hindi - BccFalna.com ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook  C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C Programming Language in Hindi | Page: 477 + 265 | Format: PDF

BUY NOW DOWNLOAD READ ONLINE

Download All Hindi EBooks

सभी हिन्दी EBooks C, C++, Java, C#, ASP.NET, Oracle, Data Structure, VB6, PHP, HTML5, JavaScript, jQuery, WordPress, etc... के DOWNLOAD LINKS प्राप्‍त करें, अपने EMail पर।

Register करके Login करें। इस Popup से छुटकारा पाएें।