Latest web development tutorials

struktur C

C memungkinkan Anda untuk menentukan sebuah array dari jenis yang sama dapat disimpan dalam item data variabel,struktur adalah pemrograman C lain tipe data yang ditetapkan pengguna yang tersedia, yang memungkinkan Anda untuk menyimpan berbagai jenis item data.

Struktur yang digunakan untuk mewakili rekor, misalkan Anda ingin melacak buku-buku perpustakaan yang dinamis, Anda mungkin perlu untuk melacak setiap buku properti berikut:

  • judul
  • penulis
  • subyek
  • buku ID

struktur definisi

Dalam rangka untuk menentukan struktur, Anda harus menggunakan pernyataanstruct.Pernyataan struct mendefinisikan tipe data baru yang berisi sejumlah anggota, pernyataan Format struct adalah sebagai berikut:

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

tag struktur adalah opsional, setiap definisi anggota adalah definisi standar dari variabel, seperti int i; atau mengapung f, atau definisi variabel valid lainnya.Pada akhir struktur didefinisikan, yang terakhir sebelum titik koma, Anda dapat menentukan satu atau lebih variabel struktural, yang opsional. Berikut adalah struktur deklarasi Pesan hingga:

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

Akses ke anggota struktur

Untuk mengakses anggota dari struktur, kitamenggunakan operator akses anggota (.).Operator akses anggota adalah struktur periode nama variabel dan struktur dari anggota kami ingin mengakses antara. Anda dapat menentukan jenis struktur variabelmenggunakan kata kunci struct.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;
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

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

Struktur sebagai parameter fungsi

Anda dapat menempatkan struktur sebagai parameter fungsi, cara Senat mirip dengan jenis lain dari variabel atau pointer. Anda dapat menggunakan contoh di atas jalan untuk mengakses variabel 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 信息 */
   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);
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

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

Pointer ke struktur

Anda dapat menentukan pointer ke struktur, cara definisi link ke sejenis lainnya variabel pointer, sebagai berikut:

struct Books *struct_pointer;

Sekarang Anda dapat mengatasi variabel struktur penyimpanan dalam definisi di atas dari sebuah variabel pointer. Untuk menemukan alamat dari variabel struktur, & operator di depan nama struktur, sebagai berikut:

struct_pointer = &Book1;

Untuk menggunakan pointer untuk mengakses poin struktur anggota untuk struktur, Anda harus menggunakan -> operator, sebagai berikut:

struct_pointer->title;

Mari kita gunakan pointer struktur untuk menulis ulang contoh di atas, itu akan membantu Anda memahami konsep pointer 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);
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

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

bidang bit

Beberapa informasi disimpan dan tidak perlu mengambil byte penuh, sementara akuntansi untuk hanya satu atau beberapa bit. Misalnya, ketika menyimpan saklar, hanya dua negara 0 dan 1, dengan bit. Untuk menghemat ruang penyimpanan, dan proses sederhana, bahasa C dan menyediakan struktur data yang disebut "bit lapangan" atau "segmen bit."

disebut "bit field" adalah satu byte dalam biner dibagi menjadi beberapa bidang yang berbeda, dan menunjukkan jumlah bit di masing-masing daerah. Setiap domain memiliki nama domain, yang memungkinkan program untuk beroperasi sesuai dengan nama domain. Jadi kita dapat menempatkan beberapa objek yang berbeda dengan bidang byte biner bit untuk mewakili.

Contoh umum:

  • Ketika menyimpan switch dengan biner, hanya dua negara 0 dan 1.
  • Membaca format file eksternal - dapat membaca format file non-standar. Misalnya: 9-bit integer.

Deskripsi Mendefinisikan variabel lapangan sedikit dan sedikit bidang

definisi lapangan bit dan definisi struktur yang mirip dengan bentuk:

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

Yang membentuk bit bidang daftar adalah:

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

Sebagai contoh:

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

Dalam cara yang sama dijelaskan variabel bitfield dan variabel struktur dijelaskan. Dapat digunakan setelah definisi pertama menggambarkan dan mendefinisikan petunjuk baik secara langsung menggambarkan hal ini dalam tiga cara. Sebagai contoh:

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

Deskripsi untuk data variabel bs, total dua byte. Yang menyumbang sedikit bidang 8 sedikit lapangan b menyumbang dua, akuntansi untuk bidang 6 bit c.

Mari kita lihat sebuah contoh:

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 termasuk enam anggota: empat 1-bit identifier f1..f4, tipe 4-bit dan 9-bit my_int.

Untuk definisi bidang bit ada instruksi berikut:

  • Bidang bit harus disimpan dalam satu byte, bukan rentang dua byte. Seperti ketika byte tidak cukup ruang tersisa untuk menyimpan domain lain, harus menjadi unit penyimpanan berikutnya dari bidang bit. Hal ini juga dapat sengaja pada domain dari unit berikutnya. Sebagai contoh:

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

    Dalam definisi bit bidang ini, empat bit dari byte pertama setelah empat mengatakan mereka tidak menggunakan untuk mengisi 0, b dari byte kedua, menempati 4, c menempati empat.

  • Karena medan bit tidak diperbolehkan di dua byte, sehingga panjang dari bidang bit tidak dapat lebih besar dari satu panjang byte, yang tidak lebih dari 8 biner. Jika panjang maksimum lebih besar dari seluruh panjang kata komputer, beberapa kompiler memungkinkan daerah memori tumpang tindih, dan beberapa kompiler dapat menempatkan lebih dari satu bagian dari domain penyimpanan kata berikutnya.
  • sedikit bidang dapat lapangan sedikit disebutkan namanya, maka hanya digunakan sebagai fill atau posisi penyesuaian. bit bidang yang tidak disebutkan namanya tidak dapat digunakan. Sebagai contoh:

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

Seperti dapat dilihat dari analisis di atas, bidang bit pada dasarnya adalah jenis struktur, tetapi anggotanya dengan distribusi biner.

bidang penggunaan bit

Anggota yang menggunakan struktur yang sama dan lapangan sedikit, bentuk umum:

    位域变量名·位域名

lapangan sedikit memungkinkan berbagai format.

Perhatikan 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);	/* 用指针方式输出了这三个域的值 */
}

Contoh Program mendefinisikan bit bidang struktur bs, bidang tiga-bit adalah a, b, c. Deskripsi dari jenis bit bs variabel dan menunjuk bs Jenis pointer variabel PBIT. Ini merupakan bidang bit juga dapat digunakan pointer.