ParsX.com
پذیرش پروژه از دانشجویی ... تا سازمانی 09376225339
 
   ProfileProfile   Log in to check your private messagesLog in to check your private messages  |  FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups Log inLog in   RegisterRegister 

یونیون ها ( Union ) در C

 
Post new topic   Reply to topic    ParsX.com Forum Index -> C/C++ Programming
View previous topic :: View next topic  
Author Message
arash
مدير بخش سي
مدير بخش سي


Joined: 27 Nov 2004
Posts: 1232
Location: www.parsx.com

PostPosted: Tue Sep 20, 2005 10:02 am    Post subject: یونیون ها ( Union ) در C Reply with quote

یونیون ها :
تعریف و استفاده یونیون ها مانند ساختمان ها می باشد ولی تفاوت اصلی آنها در مصرف حافظه است . وقتی یک ساختمان به شکل زیر :
struct student{
   int id;
   char name;
   }stu;

تعریف می کنیم متغییر stu دقیقا 3 خانه از حافظه را اشغال می کند . در صورتی که اگر این ساختمان را به صورت یک یونیون به شکل زیر تعریف می کردیم :

union ustudent{
   int uid;
   char uname;
   }ustu;

متغییر ustu دقیقا 2 خانه را از حافظه اشغال می کند . چون وقتی شما یک یونیون تعریف می کنید تمام متغییر های ان از یک جای حافظه شروع می شود .
نکته Exclamation:
می دانید که int دو خانه از حافظه را اشغال می کند و char یک خانه .
پس نتیجه می گیریم وقتی یونیون ustudent را تعریف می کنیم به شکل زیر خانه های حافظه اشغال می شوند :


نکته Exclamation:
یک مشکل در یونیون ها اینست که نمی توانیم دو خانه از آن را هم زمان مقدار دهی کرده و دو باره هر کدام را بازیابی کنیم .
نکته Exclamation:
مقدار حافظه ای که هر یونیون اشغال می کند به اندازه بزرگترین مقدار داده است که در آن تعریف می کنیم . در مثال ذکر شده مقدار حافظه ای که متغییر ustu اشغال می کند به اندازه بزرگترین مقدار داده ای آن یعنی دو بایت فضا اشغال می کند . در صورتی که متغییر stu مقدار 3 بایت به اندازه مجموع مقادیر حافظه اشغال شده می شود .

استفاده از یونیون ها :
استفاده از یونیون ها مثل ساختمان است : ustu.id=11012

نکته Exclamation:
یونیون ها را می توان مثل ساختمان ها تو در تو استفاده کرد . و یا حتی ترکیبی با ساختمان ها .( فقط یادتان باشد که یونیون ها بیشتر برای موارد که موقتا از یک مقدار استفاده می کنید استفاده می شوند )
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
Back to top
vahid
بي تو هرگز


Joined: 26 Nov 2004
Posts: 2973
Location: Tehran

PostPosted: Wed Sep 21, 2005 6:18 pm    Post subject: Reply with quote

به چه دردي ميخوره ؟
Back to top
arash
مدير بخش سي
مدير بخش سي


Joined: 27 Nov 2004
Posts: 1232
Location: www.parsx.com

PostPosted: Wed Sep 21, 2005 10:07 pm    Post subject: Reply with quote

تو کنکور می یاد Smile
Back to top
samie
مهمون يكي دو روزه


Joined: 29 Dec 2006
Posts: 2

PostPosted: Fri Dec 29, 2006 8:51 pm    Post subject: Reply with quote

سلام
رکورد متغیر با استفاده از یونیون چطور تعریف میشه؟
می خوام برنامه ای بنویسم که اطلاعات کارمندان رو بگیره و برای کارمندان رسمی و ساعتی از یونیون استفاده کنه
کارمند رسمی شامل فیلدهای سابقه کار و مزایا
کارمند ساعتی شامل فیلدهای ساعت اضافه کاری تاریخ شروع کار
فیلدهای مشترک هم که نام و فامیلی هستندا
چطور می تونم تعریف کنم؟ ..با توجه به اینکه در یونیون در هر لحظه میشه یک مقدار رو گرفت Crying or Very sad
Back to top
vahid
بي تو هرگز


Joined: 26 Nov 2004
Posts: 2973
Location: Tehran

PostPosted: Wed Jan 03, 2007 8:32 am    Post subject: Reply with quote

سوالتون رو تو يه تاپيك جديد بپرسيد لطفا .
Back to top
Display posts from previous:   
Post new topic   Reply to topic    ParsX.com Forum Index -> C/C++ Programming All times are GMT + 3.5 Hours
Page 1 of 1

 
Jump to:  
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