آموزش زبان C (قسمت دهم:structures)

به آموزش زبان C (قسمت دهم – Structures) خوش اومدید.

ساختارها در C بسیار کاربردی و ویژه هستند که می توانند چندین متغیر بزرگ را درون خود جای دهند. در واقع ساختارها اساس کلاس ها و اشیاء (Objects) در زبان C هستند. از ساختارها در موارد زیر استفاده می شود:

  • سری سازی و مرتب سازی (Serialization) اطلاعات یا دادگان
  • ارسال و دریافت چندین آرگومان (متغیر) در قالب یک آرگومان درون توابع
  • ایجاد ساختارهای دادگان (Data Structures) مانند لیستهای ارتباطی (Likned lists)، درخت باینری (Binary Trees) و غیره (با این مفاهیم بعدا بیشتر آشنا می شویم.)

از همه این موادر گذشته،  مهمترین ویژگی ساختارها این است که ما می توانیم چندین متغیر را در یک ساختار تعریف کنیم تا هم دسترسی بهتری داشته باشیم و هم کدمان بهینه تر گردد.

ساده ترین مثال از ساختارها را در کد زیر می توان دید  که یک ساختار نقطه ای (points) برداری است  و دارای دو مولفه به نام های x  و y می باشد.

struct point {
    int x;
    int y;
};

حالا اجازه بدید یک نقطه جدید تعریف و از آن استفاده کنیم. فرض کنید یک تابع با نام draw داریم که مولفه های یک نقطه را می گیرد و آن را ترسیم می کند. بدون استفاده از ساختارها، ما برای هر مختصات باید دو متغیر تعریف کنیم (یکی برای X و یکی هم برای Y) کد زیر:

/* draws a point at 10, 5 */
int x = ۱۰;
int y = ۵;
draw(x, y);

اما با استفاده از ساختارها ما می توانیم یک point به صورت زیر تعریف کنیم:

/* draws a point at 10, 5 */
struct point p;
p.x = ۱۰;
p.y = ۵;
draw(p);

همونطور که می بینید برای دسترسی به متغیرهای point باید از اپراتور دات (.) استفاده کنیم.

تایپ دف ها (Typedefs):

کلمه کلیدی typedef به منظور تعریف یک نام جدید برای انواع داده موجود استفاده می شود. در مثال زیر عبارت BYTE برای نوع داده unsigned char تعریف شده است:

typedef unsigned char BYTE;

بعد از تعریف بالا، زمانی که شما از عبارت BYTE استفاده می کنید، کامپایلر آن را معادل unsigned char در نظر می گیرد. در حقیقت یک نام مستعار برای یک نوع خاص تعریف می شود. برای نمونه:

BYTE b1,b2;

بر اساس قرار داد از حروف بزرگ برای نام جدید استفاده می شود تا به برنامه نویس یاد آوری کند که این نوع داده را خود یا برنامه نویس دیگر تعریف کرده است و یک نام مستعار می باشد. اما شما می توانید از حروف کوچک هم مانند نمونه زیر استفاده کنید:

typedef unsigned char byte;

در واقع typedef ها به ما این امکان را می دهند که انواع مختلفی متغیر را با اسامی مختلف تعریف کنیم – که میتواند منجر به بهتر شدن ساختارها و پوینترها شود. دواقع ما می خواهیم از شر تعاریف بلند برای یک ساختار نقطه ای (مثل مثال بال) خلاص شویم که برای اینکار ما میتونیم از ترکیب زیر استفاده کنیم تا در هربار که می خواهیم یک نقطه را تعریف کنیم کلمه struct را حذف کنیم:

typedef struct {
    int x;
    int y;
} point;

این به ما اجازه میده که یک نقطه مثل حالت زیر تعریف کنیم:

point p;

ساختارها همچنین میتونن حاوی اشاره گرها نیز باشند – که به اونها اجازه میده که رشته ها یا انواع دیگر متغیرها رو در خودشون نگه دارند. مثلا در مثال زیر ما می توانیم یک ساختار برای یک خودرو ایجاد کنیم. که شامل برند و مدل خودرو می باشد:

typedef struct {
    char * brand;
    int model;
} vehicle;

همانطور که می بینید brand یک اشاره گر از نوع char است که می تواند حاوی یک رشته باشد. که در زیر استفاده از اون آورده شده:

vehicle mycar;
mycar.brand = "Ford";
mycar.model = ۲۰۰۷;

تمرین:

در کد زیر یک ساختار داده تعریف کنید اسمشو بزارید “person” که شامل یک رشته (پوینتر به یک char) با نام name و یک متغیر از نوع int با نام age:

#include <stdio.h> 
/* define the person struct here using the typedef syntax */
int main() {
    person john;
    /* testing code */
    john.name = "John";
    john.age = 27;
    printf("%s is %d years old.", john.name, john.age);
}

جواب تمرین:

#include 
#include 
typedef struct {
    char * name;
    int age;
} person;
int main() {
    person john;
    /* testing code */
    john.name = "John";
    john.age = 27;
    printf("%s is %d years old.", john.name, john.age);
}

همانطور که می بینید در این کد باید یک ساختار با نام person ایجاد شود که دارای دو مولفه name و age باشد

پایان آموزش زبان C (قسمت دهم – Structures)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

قبلا حساب کاربری ایجاد کرده اید؟
گذرواژه خود را فراموش کرده اید؟
Loading...