ساختار ها در زبان C – آموزش زبان C

c structures 4147 ساختار ها در زبان C   آموزش زبان C

ساختار ها در زبان C

ساختارها مشابه آرایه ها هستند با این تفاوت که در آرایه ها فقط می توانید یک نوع داده داشته باشید. یعنی همه عناصر آرایه باید از این نوع باشند. اما ساختارها اجازه می دهد تا انواع داده مختلف را در یک مجموعه قرار دهیم.

از ساختار برای نشان دادن یک رکورد استفاده می شود. فرض کنید می خواهید کتاب های خود را در یک کتابخانه نگه داری کنید. ممکن است بخواهد اطلاعات زیر را در مورد هر کتاب ذخیره کنید:

  • عنوان (Title)
  • نویسنده (Author)
  • موضوع (Subject)
  • شناسه (Id)

تعریف یک ساختار

برای تعریف یک ساختار باید از کلمه کلیدی struct استفاده کنید. شکل کلی تعریف یک ساختار را در زیر مشاهده می کنید:

struct [structure tag] {
member definition;
member definition;
...
member definition;
} [one or more structure variables];

بخش structure tag اختیاری است و تعریف عضوهای ساختار مانند تعریف متغیرهای عادی می باشد. بعد از } و قبل از سمی کالن می توانید متغیرهای خود را که از نوع ساختار هشتند را تعریف کنید. در زیر نحوه تعریف ساختار Book را مشاهده می کنید:

struct Books {
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} book;

دسترسی به اعضای ساختار

به منظور دسترسی به اعضای یک ساختار می توانید از عملگر (.) استفاده کنید. در هنگام تعریف یک متغیر از نوع ساختار باید از کلمه کلیدی struct استفاده کنید. به مثال زیر توجه کنید:

#include <stdio.h>
#include <string.h> 
struct Books {
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
int main( ) {
   struct Books Book1;        /* Declare Book1 of type Book */
   struct Books Book2;        /* Declare Book2 of type Book */
   /* book 1 specification */
   strcpy( Book1.title, "C Programming");
   strcpy( Book1.author, "Nuha Ali"); 
   strcpy( Book1.subject, "C Programming Tutorial");
   Book1.book_id = 6495407;
   /* book 2 specification */
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Zara Ali");
   strcpy( Book2.subject, "Telecom Billing Tutorial");
   Book2.book_id = 6495700;
   /* print Book1 info */
   printf( "Book 1 title : %s\n", Book1.title);
   printf( "Book 1 author : %s\n", Book1.author);
   printf( "Book 1 subject : %s\n", Book1.subject);
   printf( "Book 1 book_id : %d\n", Book1.book_id);
   /* print Book2 info */
   printf( "Book 2 title : %s\n", Book2.title);
   printf( "Book 2 author : %s\n", Book2.author);
   printf( "Book 2 subject : %s\n", Book2.subject);
   printf( "Book 2 book_id : %d\n", Book2.book_id);
   return 0;
}

امتحان کنید

زمانی که کد بالا توسط کامپایلر C و اجرا شود، نتیجه زیر را تولید خواهد کرد:

Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700

ساختار به عنوان آرگومان تابع

شما می توانید یک ساختار را مثل متغیرهای عادی و اشاره گرها به یک تابع ارسال کنید:

#include <stdio.h>
#include <string.h> 
struct Books {
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
/* function declaration */
void printBook( struct Books book );
int main( ) {
   struct Books Book1;        /* Declare Book1 of type Book */
   struct Books Book2;        /* Declare Book2 of type Book */ 
   /* book 1 specification */
   strcpy( Book1.title, "C Programming");
   strcpy( Book1.author, "Nuha Ali"); 
   strcpy( Book1.subject, "C Programming Tutorial");
   Book1.book_id = 6495407;
   /* book 2 specification */
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Zara Ali");
   strcpy( Book2.subject, "Telecom Billing Tutorial");
   Book2.book_id = 6495700; 
   /* print Book1 info */
   printBook( Book1 );
   /* Print Book2 info */
   printBook( Book2 );
   return 0;
}
void printBook( struct Books book ) {
   printf( "Book title : %s\n", book.title);
   printf( "Book author : %s\n", book.author);
   printf( "Book subject : %s\n", book.subject);
   printf( "Book book_id : %d\n", book.book_id);
}

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

Book title : C Programming
Book author : Nuha Ali
Book subject : C Programming Tutorial
Book book_id : 6495407
Book title : Telecom Billing
Book author : Zara Ali
Book subject : Telecom Billing Tutorial
Book book_id : 6495700

اشاره گر به ساختار

تعریف اشاره گر به ساختار مانند تعریف اشاره گر به یک متغیر عادی می باشد:

struct Books *struct_pointer;

حال می توانید آدرس متغیر ساختاری خود را در اشاره گر بالا ذخیره کنید. برای پیدا کردن آدرس یک متغیر ساختاری از عملگر & استفاده کنید:

struct_pointer = &Book1;

برای دسترسی به اعضای یک ساختار از طریق یک اشاره گر به آن ساختار باید از عملگر (->)  استفاده کنید. مانند نمونه زیر:

struct_pointer->title;

مثال فوق را با استفاده از اشاره گر به ساختار تغییر می دهیم:

#include <stdio.h>
#include <string.h>
struct Books {
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
/* function declaration */
void printBook( struct Books *book );
int main( ) {
   struct Books Book1;        /* Declare Book1 of type Book */
   struct Books Book2;        /* Declare Book2 of type Book */
   /* book 1 specification */
   strcpy( Book1.title, "C Programming");
   strcpy( Book1.author, "Nuha Ali"); 
   strcpy( Book1.subject, "C Programming Tutorial");
   Book1.book_id = 6495407;
   /* book 2 specification */
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Zara Ali");
   strcpy( Book2.subject, "Telecom Billing Tutorial");
   Book2.book_id = 6495700;
   /* print Book1 info by passing address of Book1 */
   printBook( &Book1 );
   /* print Book2 info by passing address of Book2 */
   printBook( &Book2 );
   return 0;
}
void printBook( struct Books *book ) {
   printf( "Book title : %s\n", book->title);
   printf( "Book author : %s\n", book->author);
   printf( "Book subject : %s\n", book->subject);
   printf( "Book book_id : %d\n", book->book_id);
}

امتحان کنید

زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:

Book title : C Programming
Book author : Nuha Ali
Book subject : C Programming Tutorial
Book book_id : 6495407
Book title : Telecom Billing
Book author : Zara Ali
Book subject : Telecom Billing Tutorial
Book book_id : 6495700

Bit Field ها

ویژگی Bit Field در زبان C به شما امکان تنظیم مقدار حافظه اشغالی توسط متغیرهای عضو یک ساختار را می دهد. مثال زیر نحوه استفاده از Bit Field را نشان می دهد:

struct packed_struct {
   unsigned int f1:1;
   unsigned int f2:1;
   unsigned int f3:1;
   unsigned int f4:1;
   unsigned int type:4;
   unsigned int my_int:9;
} pack;

در ساختار بسته بندی شده بالا، متغیرهای f1 تا f4 یک بیت، متغیر type 4 بیت و متغیر my_int هم ۹ بیت اشغال می کنند. در مورد Bit Field ها در بخش های بعدی توضیحات بیشتری ارائه می شود.

نوشته ساختار ها در زبان C – آموزش زبان C اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.

درباره نویسنده: administrator

ممکن است دوست داشته باشید

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

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