struktur C


Tatasusunan C membolehkan anda menentukan pembolehubah yang boleh menyimpan item data daripada jenis yang sama Struktur ialah satu lagi jenis data yang ditentukan pengguna yang tersedia dalam pengaturcaraan C, yang membolehkan anda menyimpan. jenis item data yang berbeza. Struktur

digunakan untuk mewakili rekod Katakan anda ingin menjejaki dinamik buku dalam perpustakaan Anda mungkin perlu menjejaki atribut berikut bagi setiap buku:

  • <. 🎜>Tajuk

  • Pengarang

  • Subjek

  • ID Buku

Mentakrifkan struktur

Untuk mentakrifkan struktur, anda mesti menggunakan pernyataan struktur. Pernyataan struct mentakrifkan jenis data baharu yang mengandungi berbilang ahli Format pernyataan struct adalah seperti berikut:

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

tag struktur adalah pilihan, dan setiap definisi ahli ialah definisi pembolehubah standard. , seperti int i atau apungan f atau definisi pembolehubah lain yang sah. Pada penghujung definisi struktur, sebelum koma bertitik terakhir, anda boleh menentukan satu atau lebih pembolehubah struktur secara pilihan. Begini cara anda mengisytiharkan struktur Buku:

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

Mengakses ahli struktur

Untuk mengakses ahli struktur, kami menggunakan operator akses ahli (.). Operator capaian ahli ialah tempoh antara nama pembolehubah struktur dan ahli struktur yang ingin kita akses. Anda boleh menggunakan kata kunci struct untuk mentakrifkan pembolehubah jenis struktur. Contoh berikut menunjukkan penggunaan struktur:

#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;        /* 声明 Book1,类型为 Book */   struct Books Book2;        /* 声明 Book2,类型为 Book */ 
   /* Book1 详述 */
   strcpy( Book1.title, "C Programming");
   strcpy( Book1.author, "Nuha Ali"); 
   strcpy( Book1.subject, "C Programming Tutorial");   Book1.book_id = 6495407;   /* Book2 详述 */
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Zara Ali");
   strcpy( Book2.subject, "Telecom Billing Tutorial");   Book2.book_id = 6495700; 
   /* 输出 Book1 信息 */
   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);   /* 输出 Book2 信息 */
   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;}

Apabila kod di atas disusun dan dilaksanakan, ia menghasilkan keputusan berikut:

Book 1 title : C ProgrammingBook 1 author : Nuha AliBook 1 subject : C Programming TutorialBook 1 book_id : 6495407Book 2 title : Telecom BillingBook 2 author : Zara AliBook 2 subject : Telecom Billing TutorialBook 2 book_id : 6495700

Struktur sebagai parameter fungsi

You Structures boleh digunakan sebagai parameter fungsi, dan kaedah lulus parameter adalah serupa dengan jenis pembolehubah atau penunjuk lain. Anda boleh mengakses pembolehubah struktur menggunakan kaedah yang sama seperti dalam contoh di atas:

#include <stdio.h>#include <string.h> struct Books{   char  title[50];   char  author[50];   char  subject[100];   int   book_id;};/* 函数声明 */void printBook( struct Books book );int main( ){   struct Books Book1;        /* 声明 Book1,类型为 Book */   struct Books Book2;        /* 声明 Book2,类型为 Book */ 
   /* Book1 详述 */
   strcpy( Book1.title, "C Programming");
   strcpy( Book1.author, "Nuha Ali"); 
   strcpy( Book1.subject, "C Programming Tutorial");   Book1.book_id = 6495407;   /* Book2 详述 */
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Zara Ali");
   strcpy( Book2.subject, "Telecom Billing Tutorial");   Book2.book_id = 6495700; 
   /* 输出 Book1 信息 */
   printBook( Book1 );   /* 输出 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);}

Apabila kod di atas disusun dan dilaksanakan, ia menghasilkan keputusan berikut:

Book title : C ProgrammingBook author : Nuha AliBook subject : C Programming TutorialBook book_id : 6495407Book title : Telecom BillingBook author : Zara AliBook subject : Telecom Billing TutorialBook book_id : 6495700

Penunjuk ke struktur

Anda boleh mentakrifkan penunjuk kepada struktur dengan cara yang sama seperti anda mentakrifkan penuding kepada jenis pembolehubah lain, seperti yang ditunjukkan di bawah:

struct Books *struct_pointer;

Kini anda boleh menyimpan alamat pembolehubah struktur dalam penuding pembolehubah yang ditakrifkan di atas. Untuk mencari alamat pembolehubah struktur, letakkan & operator di hadapan nama struktur, seperti ini:

struct_pointer = &Book1;

Untuk mengakses ahli struktur menggunakan penunjuk ke struktur, anda mesti menggunakan -> operator , seperti yang ditunjukkan di bawah:

struct_pointer->title;

Mari kita tulis semula contoh di atas menggunakan penunjuk struktur, yang akan membantu anda memahami konsep penunjuk struktur:

#include <stdio.h>#include <string.h> struct Books{   char  title[50];   char  author[50];   char  subject[100];   int   book_id;};/* 函数声明 */void printBook( struct Books *book );int main( ){   struct Books Book1;        /* 声明 Book1,类型为 Book */   struct Books Book2;        /* 声明 Book2,类型为 Book */ 
   /* Book1 详述 */
   strcpy( Book1.title, "C Programming");
   strcpy( Book1.author, "Nuha Ali"); 
   strcpy( Book1.subject, "C Programming Tutorial");   Book1.book_id = 6495407;   /* Book2 详述 */
   strcpy( Book2.title, "Telecom Billing");
   strcpy( Book2.author, "Zara Ali");
   strcpy( Book2.subject, "Telecom Billing Tutorial");   Book2.book_id = 6495700; 
   /* 通过传 Book1 的地址来输出 Book1 信息 */
   printBook( &Book1 );   /* 通过传 Book2 的地址来输出 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);}

Apabila kod di atas disusun dan Apabila dilaksanakan, ia akan menghasilkan keputusan berikut:

Book title : C ProgrammingBook author : Nuha AliBook subject : C Programming TutorialBook book_id : 6495407Book title : Telecom BillingBook author : Zara AliBook subject : Telecom Billing TutorialBook book_id : 6495700

medan bit

Apabila sesetengah maklumat disimpan, ia tidak perlu menduduki bait lengkap, tetapi hanya beberapa atau satu bit binari . Sebagai contoh, apabila menyimpan nilai suis, hanya terdapat dua keadaan: 0 dan 1, jadi binari 1-bit boleh digunakan. Untuk menjimatkan ruang storan dan memudahkan pemprosesan, bahasa C menyediakan struktur data yang dipanggil "medan bit" atau "segmen bit".

Apa yang dipanggil "medan bit" adalah untuk membahagikan bit perduaan dalam bait kepada beberapa kawasan berbeza dan menentukan bilangan bit dalam setiap kawasan. Setiap domain mempunyai nama domain yang membenarkan operasi mengikut nama domain dalam program. Dengan cara ini, beberapa objek berbeza boleh diwakili oleh medan bit binari satu bait.

Contoh biasa:

  • Apabila binari 1-bit digunakan untuk menyimpan nilai suis, hanya terdapat dua keadaan: 0 dan 1.

  • Baca format fail luaran - boleh membaca format fail bukan standard. Contohnya: integer 9 digit.

Takrif medan bit dan perihalan pembolehubah medan bit

Takrif medan bit serupa dengan takrifan struktur, bentuknya ialah:

    struct 位域结构名        { 位域列表 };

Bentuk medan bit senarai Contohnya:

    类型说明符 位域名: 位域长度

Contohnya:

struct bs{    int a:8;    int b:2;    int c:6;};

Pembolehubah medan bit diisytiharkan dengan cara yang sama seperti pembolehubah struktur. Anda boleh mentakrifkan dahulu dan kemudian menerangkan, mentakrifkan dan menerangkan pada masa yang sama, atau menerangkan secara langsung. Contohnya:

struct bs{    int a:8;    int b:2;    int c:6;}data;

menunjukkan bahawa data ialah pembolehubah bs, menduduki dua bait secara keseluruhan. Medan bit a menduduki 8 bit, medan bit b menduduki 2 bit, dan medan bit c menduduki 6 bit.

Mari kita lihat contoh lain:

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;

Di sini, packed_struct mengandungi 6 ahli: empat pengecam 1 digit f1..f4, jenis 4 digit dan 9 bit my_int.

Terdapat beberapa penjelasan untuk takrif medan bit:

  • Medan bit mesti disimpan dalam bait yang sama dan tidak boleh menjangkau Dua bait . Jika ruang baki satu bait tidak mencukupi untuk menyimpan medan bit yang lain, medan bit hendaklah disimpan dari unit seterusnya. Anda juga boleh dengan sengaja memulakan medan sedikit dari unit seterusnya. Contohnya:

    struct bs{    unsigned a:4;    unsigned  :4;    /* 空域 */    unsigned b:4;    /* 从下一单元开始存放 */    unsigned c:4}

    Dalam definisi medan bit ini, a menduduki 4 bit bait pertama, isi 4 bit terakhir dengan 0 untuk menunjukkan tidak menggunakan, b bermula dari bait kedua, menduduki 4 bit, c menduduki 4 Bit.

  • Memandangkan medan bit tidak dibenarkan menjangkau dua bait, panjang medan bit tidak boleh lebih besar daripada panjang satu bait, yang bermaksud ia tidak boleh melebihi 8 bit binari. Sesetengah penyusun mungkin membenarkan memori untuk medan bertindih jika panjang maksimum lebih besar daripada panjang integer komputer, dan penyusun lain boleh menyimpan bahagian medan yang lebih besar dalam perkataan seterusnya. Medan bit

  • boleh menjadi medan bit yang tidak dinamakan, dalam hal ini ia hanya digunakan untuk pelarasan atau pelarasan kedudukan. Medan bit yang tidak dinamakan tidak boleh digunakan. Contohnya:

    struct k{    int a:1;    int  :2;    /* 该 2 位不能使用 */    int b:3;    int c:2;};

Seperti yang dapat dilihat daripada analisis di atas, medan bit pada dasarnya adalah jenis struktur, tetapi ahlinya diperuntukkan dalam istilah binari. Penggunaan

medan bit

Penggunaan medan bit

adalah sama dengan penggunaan ahli struktur Bentuk amnya ialah:

    位域变量名·位域名

Medan bit membenarkan output dalam pelbagai format.

Sila lihat contoh berikut:

main(){    struct bs{        unsigned a:1;        unsigned b:3;        unsigned c:4;    } bit,*pbit;
    bit.a=1;/* 给位域赋值(应注意赋值不能超过该位域的允许范围) */
    bit.b=7;/* 给位域赋值(应注意赋值不能超过该位域的允许范围) */
    bit.c=15;/* 给位域赋值(应注意赋值不能超过该位域的允许范围) */
    printf("%d,%d,%d\n",bit.a,bit.b,bit.c);/* 以整型量格式输出三个域的内容 */
    pbit=&bit;/* 把位域变量 bit 的地址送给指针变量 pbit */
    pbit->a=0;/* 用指针方式给位域 a 重新赋值,赋为 0 */
    pbit->b&=3;/* 使用了复合的位运算符 "&=",相当于:pbit->b=pbit->b&3,位域 b 中原有值为 7,与 3 作按位与运算的结果为 3(111&011=011,十进制值为 3) */
    pbit->c|=1;/* 使用了复合位运算符"|=",相当于:pbit->c=pbit->c|1,其结果为 15 */
    printf("%d,%d,%d\n",pbit->a,pbit->b,pbit->c);/* 用指针方式输出了这三个域的值 */}

Program contoh di atas mentakrifkan struktur medan bit bs, dan tiga medan bit ialah a, b dan c. Menerangkan bit pembolehubah jenis bs dan pbit pemboleh ubah penunjuk menunjuk ke jenis bs. Ini bermakna bahawa medan bit juga boleh menggunakan penunjuk.