structure یا ساختار در برنامه نویسی C

در این آموزش با انواع ساختار (structure) در برنامه نویسی C آشنا خواهید شد و نحوه تعریف ساختارها و استفاده از آنها را با کمک مثال های مختلف یاد خواهید گرفت.
در برنامه نویسی C، یک ساختار مجموعه ای از متغیرها (از انواع مختلف) تحت یک نام واحد است.
به زبان ساده باید گفت ساختار یا struct در زبان C یک نوع داده سفارشی و ترکیبی است که به برنامهنویس اجازه میدهد چندین متغیر ناهمگون (با انواع دادهای متفاوت) را که از نظر منطقی به یکدیگر مرتبط هستند، تحت یک نام واحد بستهبندی و دستهبندی کند.
ویژگیهای بنیادین ساختارها
-
حافظه اختصاصی و مستقل: برخلاف یونیونها که تمام اعضا از یک فضای حافظه مشترک استفاده میکردند، در ساختارها هر عضو، خانه و فضای حافظه کاملاً مجزا و اختصاصی خود را اشغال میکند.
-
اعتبار همزمان تمام اعضا: به دلیل مجزا بودن فضای حافظه، تمام متغیرهای موجود در یک ساختار در آنِ واحد معتبر، فعال و در دسترس هستند. تغییر مقدار یک عضو، هیچ آسیبی به دادههای سایر اعضا نمیزند.
-
نحوه محاسبه حجم در حافظه: اندازه کل یک ساختار در حافظه حداقل برابر با مجموع حجم تکتک اعضای درون آن است. البته کامپایلرها معمولاً برای افزایش سرعت پردازنده، مقداری فضای خالی بیمصرف (اصطلاحاً Padding یا ترازسازی حافظه) بین اعضا قرار میدهند که باعث میشود حجم نهایی کمی بیشتر از مجموع محض دادهها شود.
-
ارزش کپسولهسازی: ساختارها اولین قدم به سوی برنامهنویسی شیگرا در زبانهای جدیدتر هستند؛ زیرا امکان دستهبندی دادههای مرتبط را در قالب یک بسته منسجم فراهم میکنند.
هدف و فلسفه استفاده
هدف اصلی استفاده از ساختارها، ایجاد نظم، معماری تمیز و مدلسازی موجودیتهای واقعگرایانه است.
بدون ساختارها، برنامهنویس مجبور است برای توصیف یک پدیده یا کالا، دهها متغیر جداگانه و پراکنده تعریف کند. اما ساختارها این اطلاعات پراکنده را به یک «شیء یا موجودیت واحد» تبدیل میکنند که میتوان آن را به راحتی مدیریت کرد، بین بخشهای مختلف برنامه پاس داد یا در حافظه ذخیره نمود.
تعریف ساختارها
قبل از ایجاد متغیرهای ساختار باید نوع داده آن را تعریف کنید. برای تعریف ساختار از کلمه کلیدی struct استفاده می شود.
نحوه نوشتن struct
struct نام ساختار
{
نوع داده عضو۱;
نوع داده عضو۲;
…
};
مثال
struct Person
{
char name[50];
int citNo;
float salary;
};
در اینجا، struct Person یک نوع داده مشتق است، حالا می توانید متغیرهایی از این نوع تعریف کنید.
ایجاد متغیرهای struct
وقتی یک ساختار تعریف می شود، هیچ حافظه ای به آن اختصاص داده نمی شود. برای اختصاص حافظه به یک ساختار معین و کار با آن باید متغیرهایی از نوع آن ساختار ایجاد کنید.
در اینجا نحوه ایجاد و تعریف متغیرهای ساختار آورده شده است:
struct Person
{
char name[50];
int citNo;
float salary;
};
int main()
{
struct Person person1, person2, p[20];
return 0;
}
یک روش دیگر برای ایجاد متغیر ساختار،
struct Person
{
char name[50];
int citNo;
float salary;
} person1, person2, p[20];
در هر دو حالت، دو متغیر person1، person2 و متغیر آرایه ای p با ۲۰ عنصر از نوع struct Person ایجاد شده است.
دسترسی به اعضای ساختار
برای دسترسی به اعضای یک ساختار دو نوع عملگر وجود دارد.
۱- عملگر .، عملگر عضو
۲- عملگر ->، عملگر اشاره گر ساختار (در آموزش بعدی بحث خواهد شد)
فرض کنید می خواهید به salary برای person2 دسترسی پیدا کنید:
person2.salary
مثال: محاسبه مجموع دو فاصله
// جمع دو فاصله
#include
struct Distance
{
int feet;
float inch;
} dist1, dist2, sum;
int main()
{
printf(“1st distancen”);
printf(“Enter feet: “);
scanf(“%d”, &dist1.feet);
printf(“Enter inch: “);
scanf(“%f”, &dist1.inch);
printf(“2nd distancen”);
printf(“Enter feet: “);
scanf(“%d”, &dist2.feet);
printf(“Enter inch: “);
scanf(“%f”, &dist2.inch);
// feet جمع برحسب
sum.feet = dist1.feet + dist2.feet;
// inch جمع برحسب
sum.inch = dist1.inch + dist2.inch;
// تبدیل می شود feet بزرگتر از ۱۲ است، به inch اگر
while (sum.inch >= 12)
{
++sum.feet;
sum.inch = sum.inch – 12;
}
printf(“Sum of distances = %d’-%.1f””, sum.feet, sum.inch);
return 0;
}
خروجی
۱st distance
Enter feet: 12
Enter inch: 7.9
۲nd distance
Enter feet: 2
Enter inch: 9.8
Sum of distances = 15′-5.7″
کلمه کلیدی typedef
از کلمه کلیدی typedef برای ساخت یک نام مستعار یا ساختگی برای انواع داده استفاده می شود. به طور معمول همراه با ساختارها برای ساده سازی تعریف متغیرها استفاده می شود.
این کد
struct Distance{
int feet;
float inch;
};
int main() {
struct Distance d1, d2;
}
معادل کد زیر است،
typedef struct Distance{
int feet;
float inch;
} distances;
int main() {
distances d1, d2;
}
ساختارهای تودرتو
در برنامه نویسی C می توانید یک ساختار را در ساختار دیگری استفاده کنید. مثال،
struct complex
{
int imag;
float real;
};
struct number
{
struct complex comp;
int integers;
} num1, num2;
فرض کنید می خواهید متغیر imag را برای num2 روی ۱۱ تنظیم کنید. به صورت زیر نوشته می شود:
num2.comp.imag = 11;
چرا از ساختارها در زبان C استفاده می شود؟
فرض کنید می خواهید اطلاعات مربوط به شخصی را ذخیره کنید: نام، کد ملی و حقوق. برای ذخیره این اطلاعات می توانید متغیرهای مختلفی به نام name، code و salary ایجاد کنید.
اگر بخواهید اطلاعات چند نفر را ذخیره کنید، چه می کنید؟ باید برای اطلاعات هر شخص به طور جداگانه این متغیرها را تعریف کنید: name1، code1، salary1 و name2، code2، salary2 و …. .
روش بهتر تعریف مجموعه ای از اطلاعات مرتبط به هم تحت یک نام واحد است مانند تعریف ساختار Person و استفاده از آن برای هر شخص.
در آموزش های بعدی اطلاعات بیشتری در مورد ساختار ها کسب خواهید کرد. مانند:
- ساختارها و اشاره گرها
- ارسال ساختارها به تابع
