السلام عليكم ورحمة الله وبركاته
قرأت اليوم عن موضوع Union وكثرت الأسئلة علي بخصوصة
فأحببت أن أضع مافهمته ومالم افهمه
والموضوع واضعه للمناقشة فقط كي افهمه جيدا
-------------
اللي فمهمتة كالتالي:
1 - انه عبارة عن قائمة من العناصر ذات أنواع مختلفة من البيانات
2 - يتم اختيار أحد هذه العناصر فقط في الوقت نفسة
3- حجم الـUnion = حجم اكبر عنصر لدية مثال:
union My_union
{
int x; float y; char m;
};
سيكون حجم My_union = size of float--------------
الأشياء اللي لم افهمها جيدا :
1- اولا كتبت الشيفرة التالية
union My_Union
{
int Int;
char Char;
float Float;
};
void main()
{
My_Union Obj;
printf(" Address Of Int = %d\n Address Of Char = %d\n Address Of Float = %d\n",&Obj.Int,&Obj.Char,&Obj.Float);
}My_Union كان الناتج هو أن جميع العناصر تشير الى العنوان نفسة
بما أنها تشير الى العنوان نفسة فليش ماأعدل بنية My_Union لتكون بالشكل التالي:
union My_Union
{
int Int;
char Char;
float Float;
My_Union():Float(.5),Int(65),Char('k')
{}
};لما وضعت المشيّد ( لاحظ انني هيأت العنصر Int عند القيمة 65 --> كنت اتوقع انه حيكون قيمة المتغير Char = A ولكن المشكلة انه لم يحصل ذلك بل الأدهي انه لم يمهد الإ العنصر Float مع انه المفروض يهيء المتغير Char
فما هو التفسير؟
----------------------
2- ثاني شي لو نفترض بطريقة ما ان أحد العناصر لدية قيمة فكيف الطريقة لمعرفة العنصر؟
انا عملت الكود التالي (يمكن مايكون الطريقه الأفضل )
struct My_Struct
{
int MASK:
union
{
int Int;
char Char;
};
void Which_One()
{
switch(Mask)
{
case 1:
printf("its Integer");
break
default:
printf("its Character");
}
};ملاحظة (أعرف ان التعبير عندي سيء ولكن هذا أفضل ماأستطيع)
ودمتم سالمين