Latest web development tutorials

estructura C

C le permite definir una matriz del mismo tipo se puede almacenar en un elementos de datos variables, laestructura es la de programación C otros tipos de datos definidos por el usuario disponible, lo que le permite almacenar diferentes tipos de elementos de datos.

Estructura utiliza para representar un registro, supongamos que desea realizar un seguimiento dinámico de libros de la biblioteca, es posible que necesite para realizar un seguimiento de cada libro las siguientes propiedades:

  • título
  • autor
  • sujeto
  • Identificación libro

estructura de definición

Con el fin de definir la estructura, se debe utilizar la instrucciónestructura.declaración struct define un nuevo tipo de datos que contiene una pluralidad de miembros, la instrucción de formato de estructura es la siguiente:

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

variable de estructura es opcional, cada miembro de la definición es la definición estándar de una variable, como int i; o flotar f; u otras definiciones de variables válidos.Al final de la estructura definida, la última antes del punto y coma, puede especificar una o más variables estructurales, que es opcional. Aquí está la estructura declaración libro por:

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

El acceso a la estructura de miembro de

Con el fin de acceder a los miembros de la estructura, se utilizael operador de acceso a miembro (.).operador de acceso de miembros es una estructura período de nombres y estructuras de nuestros miembros variables quieren acceder el medio. Se puede definir el tipo de una estructura variable usandola palabra clave struct.El siguiente ejemplo demuestra el uso de la estructura:

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

Cuando el código se compila y ejecuta, produce los siguientes resultados:

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

Estructura como un parámetro de la función

Usted puede poner la estructura como un parámetro de la función, la forma Senado similar a otros tipos de variables o punteros. Puede utilizar el ejemplo anterior, la forma de acceder a variables de estructura:

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

Cuando el código se compila y ejecuta, produce los siguientes resultados:

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

Puntero a una estructura

Se puede definir un puntero a la estructura, la forma en la definición de enlaces a otros tipos similares de variable de puntero, de la siguiente manera:

struct Books *struct_pointer;

Ahora se puede abordar variables de estructura de almacenamiento en la definición anterior de una variable puntero. Para encontrar la dirección de la variable de estructura, el operador & delante del nombre de la estructura, como sigue:

struct_pointer = &Book1;

Para utilizar el puntero para acceder a los puntos de estructura de miembro de la estructura, se debe utilizar el operador ->, de la siguiente manera:

struct_pointer->title;

Vamos a usar el puntero estructura de reescribir el ejemplo anterior, que le ayudará a entender el concepto de punteros estructura:

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

Cuando el código se compila y ejecuta, produce los siguientes resultados:

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

campo de bits

Parte de la información se almacena y no necesita tomar un byte completo, mientras que representa sólo uno o unos pocos bits. Por ejemplo, cuando se almacena un interruptor, sólo dos estados 0 y 1, con un bit binario. Para ahorrar espacio de almacenamiento, y el proceso es simple, lenguaje C y proporciona una estructura de datos denominada "campo de bits" o "segmento de bits."

El llamado "campo de bits" es de un byte en binario se divide en varias áreas diferentes, e indican el número de bits en cada región. Cada dominio tiene un nombre de dominio, permitiendo que el programa opere de acuerdo con el nombre de dominio. Así que podemos poner varios objetos diferentes con un campo de un octeto de bits binarios para representar.

Ejemplos típicos:

  • Al almacenar un interruptor con un binario, sólo dos estados 0 y 1.
  • Leer los formatos de archivos externos - se puede leer formatos de archivo no estándar. Por ejemplo: de 9 bits entero.

Descripción Define variables de campo de bits y un campo de bits

definiciones de campo de bits y las definiciones de estructura similar a la forma:

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

Que forman la lista de campo de bits es:

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

Por ejemplo:

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

De la misma manera descrita variables de campo de bits y las variables de estructura descrita. Puede utilizarse después de la primera definición describe y define las instrucciones ya sea directamente ilustran esto de tres maneras. Por ejemplo:

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

Descripción de datos variables bs, un total de dos bytes. Que representó el campo de 8 bits de un campo de bits b representó para dos personas, que representan el campo de 6 bits c.

Veamos un ejemplo:

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;

Aquí, packed_struct incluye seis miembros: cuatro f1..f4 identificador de 1 bit, un tipo de 4 bits y un my_int de 9 bits.

Para la definición del campo de bits están las siguientes instrucciones:

  • Un campo de bits se debe almacenar en un solo byte, no abarcar dos bytes. Por ejemplo, cuando un byte no queda espacio suficiente para almacenar otro dominio, debe ser la siguiente unidad de almacenamiento desde el campo de bits. También puede Opinión intencionadamente dominio de la siguiente unidad. Por ejemplo:

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

    En esta definición campo de bits, un cuatro bits del primer byte después de las cuatro dijeron que no utilizan para llenar 0, b del segundo byte, que ocupa 4, c ocupa cuatro.

  • Puesto que el campo de bits no se permite a través de los dos bytes, por lo que la longitud del campo de bits no puede ser mayor que un byte de longitud, que no es más de 8 binario. Si la longitud máxima es mayor que toda la longitud de la palabra de ordenador, algunos compiladores pueden permitir región de solapamiento de la memoria, y algunos compiladores pueden poner más de una porción del dominio de almacenamiento de la palabra siguiente.
  • Los campos de bits pueden ser campo de bits sin nombre, a continuación, sólo se utiliza como posición de ajuste o de relleno. campo de bits Sin nombre no se puede utilizar. Por ejemplo:

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

Como puede observarse a partir del análisis anterior, el campo de bits es esencialmente un tipo de estructura, pero sus miembros son por distribución binaria.

Utilice los campos de bits

Los miembros que utilizan la misma estructura y campo de bits, su forma general:

    位域变量名·位域名

Campo de bits permite una variedad de formatos.

Considere los siguientes ejemplos:

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

El programa de ejemplo define la estructura de campo de bits bs, campo de tres bits es a, b, c. Descripción del tipo de bs bs bits variables y tipo de puntero apuntando PBIT variable. Esto representa un campo de bits puede también ser punteros usados.