با سلام خدمت تمامی دوستان عزیز سایت پی وی لرن .و کاربرانی که دوره کامل آموزش زبان C را دنبال می کنند. و کاربرانی که با سری آموزش های زبان C همراهمون هستند.در این جلسه به ساختارها در C , اشاره گر به ساختار , دسترسی به اعضای ساختارها در C و … می پردازیم
آرایه ها اجازه می دهد نوع متغیرهایی را که می توانند چندین داده مشابه را داشته باشند تعریف کنید.به طور مشابه، ساختار نوع دیگری از داده های تعریف شده در C است که اجازه می دهد تا موارد متفاوتی از داده ها را ترکیب کنیم. بعبارتی آرایه ها می توانند یک نوع داده داشته باشندو همه عناصر داده باید از این نوع باشند.ولی ساختارها اجازه می دهند تا انواع داده مختلف را در یک مجموعه داشته باشیم.فرض کنید میخواهید کتابهای خود را در یک کتابخانه پیگیری کنید. شما ممکن است بخواهید ویژگی های زیر را در مورد هر کتاب دنبال کنید.
برای تعریف یک ساختار، باید از عبارت struct استفاده کنید.عبارت struct یک نوع داده جدید را با بیش از یک عضو تعریف می کند. فرمت عبارت struct به شرح زیر است .
1 2 3 4 5 6 7 | struct [structure tag] { member definition; member definition; ... member definition; } [one or more structure variables]; |
structure tag اختیاری است و تعریف هر عضو ساختار مانند یک تعریف متغیر عادی است، مانند int i؛یا شناور f؛ یا هر تعریف دیگری از متغیر معتبر.
1 2 3 4 5 6 | struct Books { char title[50]; char author[50]; char subject[100]; int book_id; } book; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | #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; } |
1 2 3 4 5 6 7 8 | 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 |
شما می توانید یک ساختار را به یک تابع منتقل کنید همانطور که هر متغیر یا اشاره گر دیگر را منتقل می کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #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); } |
بعد از کامپایل و اجرای برنامه نتیجه زیر را خواهیم دید.
1 2 3 4 5 6 7 8 | 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 |
شما می توانید اشاره گر به ساختار را همانطور که اشاره گر را به هر متغیر دیگر تعریف می کنید تعریف کنید.
1 | struct Books *struct_pointer; |
حالا شما می توانید آدرس متغیر ساختاری را در متغیر اشاره گر بالا تعریف کنید. برای پیدا کردن آدرس یک متغیر ساختاری،از عملگر ‘&’؛ قبل از نام ساختار استفاده کنید.
1 | struct_pointer = &Book1; |
بگذارید مثال بالا را دوباره با استفاده از اشاره گر به ساختار بنویسیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #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); } |
بعد از کامپایل و اجرای برنامه نتیجه زیر را خواهیم دید.
1 2 3 4 5 6 7 8 | 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 |
بسته بندی چندین اشیاء در یک کلمه . به عنوان مثال، پرچم های ۱ بیتی می توانند فشرده شوند.
خواندن فرمت های فایل خارجی – فرمت های فایل غیر استاندارد می توانند خوانده شوند، به عنوان مثال، عدد صحیح ۹ بیتی.
1 2 3 4 5 6 7 8 | 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; |
در اینجا packageed_struct شامل ۶ عضو است: چهار پرچم ۱ بیتی f1..f4، یک نوع ۴ بیتی و یک my_int نه بیت را اشغال می کنند.
C به صورت خودکار فیلدهای بیتی بالا با فشردگی ممکن بسته بندی می کند، در صورتی که حداکثر طول فیلد کمتر یا برابربا طول کلمه integer باشد.اگر این مورد نباشد، بعضی از کامپایلرها ممکن است اجازه دهند که حافظه برای فیلدها اشتراک داشته باشند در حالی که دیگران فیلد بعدی را در کلمه بعدی ذخیره می کنند.
خوشحالیم ازاینکه در این مجموعه آموزشها همراه ما هستید.مبحث ساختارها در C هم به پایان رسید. جلسه بعد را با Unions همراهتون هستیم.امیدوارم مفید واقع شده باشد.