ساختمان ها
برای دانلود ویدئو روی دکمه دانلود کلیک کنید
آنچه در آموزش ساختمان ها خواهید دید:
- تعریف نوع ساختمان
- تعریف متغیر نوع ساختمان ها
- دسترسی به عناصر ساختمان ها
- ارزش دهی اولیه به ساختمان ها
- انتساب ساختمان ها به یکدیگر
- آرایه ای از ساختمان ها
- تعریف ساختمان به صورت لانه ای
- ساختمان ها به عنوان آرگومان تابع
- اشاره گر ها به ساختمان
- دسترسی به عناصر اشاره گر ساختمان ها
- ساختمان بیتی
- یونیون ها
- تغییر نام انواع داده با typedef
- انواع داده شمارشی
تعریف نوع ساختمان
نحوه ی تعریف:
struct <نام ساختمان > { عناصر ساختمان };
مثال:
struct personnel { char name[30]; int person; int salary; };
تعریف متغیر نوع ساختمان
روش اول:
struct اسامی متغیر های ساختمان> نام ساختمان>;
مثال:
struct personnel p1,p2;
روش دوم:
struct <نام ساختمان > { عناصر ساختمان } اسامی متغیر های ساختمان;
مثال: struct personnel { char name[30]; int person; int salary; }p1,p2;
دسترسی به عناصر ساختمان <نام عنصر>.<اسم متغیر از نوع ساختمان >
به عنوان مثال:
p1.name[i] nameمین عنصر آرایه i p2.person p1.salary
نحوه ی به کارگیری:
p1.persno = 1234; gets(p1.name); printf(“%d”,p1.salary);
ارزش دهی اولیه به ساختمان ها
به عنوان مثال:
struct personnel p1={“Ali Ahamdi”,1234,10000}; struct personnel p1={0}; struct personnel p1={“Ali Ahmadi”};
انتساب ساختمان به یکدیگر
p1=p2;
آرایه ای از ساختمان ها
struct personnel p1[10];
تعریف ساختمان به صورت لانه ای
struct date{ int day; int month; int year; }; struct personnel{ char name[30]; int persno; int salary; struct date workdate; };
ساختمان ها به عنوان آرگومان تابع
انتقال عناصر ساختمان به توابع:
func(p1.salary); func(p1.persno); func(&p1.salary); func(&p1.persno); func(p1.name); //نیازی به& نیست
انتقال ساختمان به توابع:
به دو روش می توان به توابع ارسال کرد:
1-روش فراخوانی با مقدار 2-روش فراخوانی با ارجاع
مثال:
struct personnel func() void func(struct personnel <نام متغیر>) func(p1);
اشاره گر ها به ساختمان
اشاره گر ساختمان به دو منظور استفاده می شود:
- امکان فراخوانی با ارجاع را در توابعی که دارای آرگومان از نوع ساختمان هستند را فراهم می کند.
- برای ایجاد لیست های پیوندی (linked list) و سایر ساختمان داده هایی که با تخصیص حافظه پویا سروکار دارند به کار میرود.
مثال:
struct prosennel *p1; p1=&p2;
دسترسی به عناصر اشاره گر ساختمان
به دو روش می توان عمل کرد:
1.ذکر نام اشاره گر در داخل پرانتز و سپس نام عنصر مورد نظر که با نقطه از هم جدا شدند
(*p1).salary
2.استفاده از عملگر <-
p1->salary
ساختمان بیتی
- اگر محدودیتی در میزان حافظه وجود داشته باشد، می توان از یک بایت به عنوان چند متغیر منطقی استفاده نمود.
- در حین ارتباط کامپیوتر با دستگاه های خارجی ، بعضی از رابط ها میتوانند اطلاعات موجود در یک بایت را (که هر بیت آن ممکن است معنی خاصی داشته باشد )انتقال دهند.
- بسیاری از زیر برنامه های سیستم نیاز به دسترسی به بیتها دارند.
نحوه تعریف:
struct نام ساختمان بیتی{ <طول فیلد 1> : <نام فیلد > <نوع فیلد 1>; . <nنوع فیلد> <nنام فیلد> : <nطول فیلد >; }
مثال:
struct device{ unsigned active : 1; unsigned ready : 1; unsigned error : 1; }devCode;
نکاتی در موردساختمان های بیتی:
- نمی توان به آدرس آن ها مراجعه کرد.
- نمی توانند به صورت آرایه تعریف شوند.
- به حد زیادی ،وابسته به ماشین هستند.
- ترکیبی از ساختمان بیتی و ساختمان معمولی ،ممکن است.
یونیون ها
محلی از حافظه که توسط دو یا چند متغیر به طور اشتراکی مورد استفاده قرار می گیرند.
نحوه ی تعریف:
union <اسم یونیون> { عناصر یونیون }اسامی متغیر ها;
مثال:
union T{ int i; char ch; float y; };
تغییر نام انواع داده باtypedef
به دو دلیل اهمیت دارد:
- موجب می شود تا مسئله ی قابل حمل بودن زبان C قوت بیشتری پیدا کند.
- موجب می شود تا برای انواع داده طولانی ، اسم ساده تری انتخاب گردد.
نحوه ی تعریف:
typedef <اسم جدید> <نوع موجود>;
مثال:
typedef struct personnel prs; typedef char string[50];
انواع داده شمارشی
نحوه ی تعریف:
enum نام نوع شمارشی{ عنصر اول , عنصر دوم, . امnعنصر };
مثال:
enum color{ red, yellow, brown }color1,color2; color1=red; color2=yellow; if(color1==color2) { ….. } *enum sample{a,b=5,c,d};
تابع ()gotoxy برای انتقال مکان نما در صفحه ی نمایش:
void gotoxy(int x,int y) { COORD c={x,y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c); }
برای اطلاعات تکمیلی به کانال تلگرام مراجعه کنید.
دیدگاهتان را بنویسید