Latest web development tutorials

struktura C

C pozwala zdefiniować tablicę tego samego typu mogą być przechowywane w zmiennej pozycji danych,struktura jest programowanie C kolejne typy danych zdefiniowane przez użytkownika dostępne, co pozwala na przechowywanie różnego rodzaju elementów danych.

Struktura używany do reprezentowania zapis, że chcesz śledzić dynamiczne biblioteki książek, może być konieczne, aby śledzić każdej książce o następujących właściwościach:

  • tytuł
  • autor
  • przedmiot
  • Book ID

struktura definicja

W celu określenia struktury, należy użyć instrukcjistruct.Oświadczenie struct definiuje nowy typ danych, który zawiera wiele elementów, zestawienie Format struktura przedstawia się następująco:

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

tag struktura jest opcjonalne, każda definicja członkiem jest standardową definicję zmiennych, takich jak int i; lub float f; lub inne ważne definicje zmiennych.Pod koniec strukturze zdefiniowanej, ostatni przed średnikiem, można określić jedną lub więcej zmiennych strukturalnych, które jest opcjonalne. Oto struktura deklaracji Rezerwacja do:

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

Dostęp do członka struktury

W celu uzyskania dostępu do elementów konstrukcji, używamyoperatora dostępu członkiem (.).Operator dostępu użytkownika jest strukturą Okres nazwy zmiennych i struktury naszych członków mieć dostęp pomiędzy. Możesz określić typ zmiennej strukturze, używającsłowa kluczowego struct.Poniższy przykład pokazuje zastosowanie struktury:

#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;
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

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

Struktura jako parametr funkcji

Można umieścić strukturę jako parametr funkcji, sposób Senatu podobny do innych typów zmiennych lub wskaźników. Można użyć Powyższy przykład drogę do dostępu do zmiennych 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);
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

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

Wskaźnik do struktury

Można zdefiniować wskaźnik do struktury, sposób definicji linki do innych podobnych typów zmiennej wskaźnika, co następuje:

struct Books *struct_pointer;

Teraz możesz zająć zmienne struktury przechowywania w powyższej definicji zmiennej wskaźnika. Aby znaleźć adres zmiennej struktury, i operatora przed nazwą struktury, co następuje:

struct_pointer = &Book1;

Aby użyć wskaźnika do uzyskania dostępu do punktów członkiem struktury do struktury, należy użyć -> operator, co następuje:

struct_pointer->title;

Użyjmy wskaźnik struktury przepisać powyższy przykład, to pomoże Ci zrozumieć pojęcie wskaźników struktury:

#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);
}

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

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

pole bit

Niektóre informacje są przechowywane i nie muszą brać pełny bajt, a co stanowi tylko jeden lub kilka bitów. Na przykład, podczas przechowywania przełącznik tylko dwa stany 0 i 1, przy binarnego bitu. Aby zaoszczędzić miejsce na dysku, a proces jest prosty, język C i stanowi strukturę danych zwaną "bitowe pole" lub "segment nieco".

Tak zwany "obszar bit" jeden bajt binarnego podzielonego na wiele różnych obszarów, i wskazuje liczbę bitów w każdym regionie. Każda domena ma nazwę domeny, dzięki czemu program działa zgodnie z nazwą domeny. Więc możemy umieścić kilka różnych przedmiotów z polem bitowym bajt binarny do reprezentowania.

Typowe przykłady:

  • Podczas przechowywania przełącznik z binarne, tylko dwa stany 0 i 1.
  • Czytaj zewnętrznych formatów plików - można odczytać niestandardowych formatów plików. Na przykład: 9-bitowej liczby całkowitej.

Opis Określa bitowych zmiennych pól i pola bitowego

definicje pola bitowego i definicje struktura podobna do postaci:

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

Które tworzą nieco lista pól jest:

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

Na przykład:

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

W ten sam sposób opisany zmienne bitowym i zmienne struktury opisane. Może być stosowany po pierwsze definicja opisuje i definiuje instrukcje bezpośrednio zilustrować to na trzy sposoby. Na przykład:

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

Opis BS zmiennych danych, łącznie z dwóch bajtów. Które stanowiły 8 bitowego pola bitowe pole b stanowiły dla dwóch osób, co stanowi 6 bitowego pola C.

Spójrzmy na przykład:

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;

Tutaj packed_struct zawiera sześć elementów: cztery 1-bitowy identyfikator f1..f4, typu 4-bitowego i 9-bitowego my_int.

Dla definicji pola bitowego istnieją następujące instrukcje:

  • Pole bitowy musi być przechowywany w jednym bajcie nie obejmowały dwa bajty. Na przykład gdy bajt nie jest wystarczająca ilość miejsca do przechowywania inną domenę, powinien być następny jednostka pamięci z pola bitowego. Może też celowo recenzji domenę z następną jednostką. Na przykład:

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

    W tej definicji nieco pole, cztery bity pierwszego bajtu po czterech stwierdziło, że nie używać, aby wypełnić 0, b od drugiego bajtu, zajmując 4, c zajmuje cztery.

  • Ponieważ pole bit nie jest dozwolone w poprzek dwóch bajtów, to długość pola bitów nie może być większa niż długość bajtu, to jest nie więcej niż 8 binarnych. Jeżeli maksymalna długość jest większa niż całkowita długość słowa komputera niektóre kompilator może pozwolić obszaru pokrywania pamięci oraz kilka kompilator może bardziej niż część domeny składowania następnego słowa.
  • Pola bitowe mogą być nienazwane pole bitowe, to jest używane tylko jako wypełnienia lub pozycji regulacyjnej. Nienazwane pole bitowe nie mogą być stosowane. Na przykład:

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

Jak widać z powyższej analizy, pole bit jest zasadniczo typ struktury, ale jego członkowie przez binarnej.

Użyj pól bitowych

Członkowie, które wykorzystują tę samą strukturę i bitowe pole, ogólnej postaci:

    位域变量名·位域名

Pole Bit umożliwia różnorodne formaty.

Rozważmy następujące przykłady:

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

Przykładowy program definiuje strukturę bitowe pole bs, trzy-bitowe pole jest a, b, c. Opis typu zmiennych bitowych bs bs i wskazujące rodzaj wskaźnika zmiennej BIT. Stanowi to pole bitowe mogą być również stosowane wskaźniki.