Joined: 27 Nov 2004 Posts: 1232 Location: www.parsx.com
Posted: Tue Sep 20, 2005 10:02 am Post subject: یونیون ها ( Union ) در C
یونیون ها :
تعریف و استفاده یونیون ها مانند ساختمان ها می باشد ولی تفاوت اصلی آنها در مصرف حافظه است . وقتی یک ساختمان به شکل زیر :
struct student{
int id;
char name;
}stu;
تعریف می کنیم متغییر stu دقیقا 3 خانه از حافظه را اشغال می کند . در صورتی که اگر این ساختمان را به صورت یک یونیون به شکل زیر تعریف می کردیم :
union ustudent{
int uid;
char uname;
}ustu;
متغییر ustu دقیقا 2 خانه را از حافظه اشغال می کند . چون وقتی شما یک یونیون تعریف می کنید تمام متغییر های ان از یک جای حافظه شروع می شود .
نکته :
می دانید که int دو خانه از حافظه را اشغال می کند و char یک خانه .
پس نتیجه می گیریم وقتی یونیون ustudent را تعریف می کنیم به شکل زیر خانه های حافظه اشغال می شوند :
نکته :
یک مشکل در یونیون ها اینست که نمی توانیم دو خانه از آن را هم زمان مقدار دهی کرده و دو باره هر کدام را بازیابی کنیم .
نکته :
مقدار حافظه ای که هر یونیون اشغال می کند به اندازه بزرگترین مقدار داده است که در آن تعریف می کنیم . در مثال ذکر شده مقدار حافظه ای که متغییر ustu اشغال می کند به اندازه بزرگترین مقدار داده ای آن یعنی دو بایت فضا اشغال می کند . در صورتی که متغییر stu مقدار 3 بایت به اندازه مجموع مقادیر حافظه اشغال شده می شود .
استفاده از یونیون ها :
استفاده از یونیون ها مثل ساختمان است : ustu.id=11012
نکته :
یونیون ها را می توان مثل ساختمان ها تو در تو استفاده کرد . و یا حتی ترکیبی با ساختمان ها .( فقط یادتان باشد که یونیون ها بیشتر برای موارد که موقتا از یک مقدار استفاده می کنید استفاده می شوند )
struct student{
int id;
char name[20];
float ave;
};
union ustudent{
char family;
struct student stu;
}ustu;
ustu.stu.id=10;
Last edited by arash on Fri Jan 20, 2006 6:42 pm; edited 3 times in total
سلام
رکورد متغیر با استفاده از یونیون چطور تعریف میشه؟
می خوام برنامه ای بنویسم که اطلاعات کارمندان رو بگیره و برای کارمندان رسمی و ساعتی از یونیون استفاده کنه
کارمند رسمی شامل فیلدهای سابقه کار و مزایا
کارمند ساعتی شامل فیلدهای ساعت اضافه کاری تاریخ شروع کار
فیلدهای مشترک هم که نام و فامیلی هستندا
چطور می تونم تعریف کنم؟ ..با توجه به اینکه در یونیون در هر لحظه میشه یک مقدار رو گرفت
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum