Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

C - Estruturas


Arrays permitem definir tipos de variáveis ​​que podem conter vários itens de dados do mesmo tipo. Da mesma forma estrutura é outro tipo de dado definido pelo usuário disponível em C que permite combinar itens de dados de diferentes tipos.

As estruturas são usadas para representar um registro. Suponha que você queira acompanhar seus livros em uma biblioteca. Você pode querer rastrear os seguintes atributos sobre cada livro -

Definindo uma estrutura


Para definir uma estrutura, você deve usar o struct declaração. A instrução struct define um novo tipo de dados, com mais de um membro. O formato da instrução struct é o seguinte -
struct [structure tag] {

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

A tag de estrutura é opcional e cada definição de membro é uma definição de variável normal, como int i; ou flutuar f; ou qualquer outra definição de variável válida. No final da definição da estrutura, antes do ponto e vírgula final, você pode especificar uma ou mais variáveis ​​de estrutura, mas é opcional. Aqui está a maneira como você declararia a estrutura do livro -
struct Books {
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} book;  

Membros da estrutura de acesso


Para acessar qualquer membro de uma estrutura, usamos o operador de acesso de membro (.) . O operador de acesso ao membro é codificado como um período entre o nome da variável da estrutura e o membro da estrutura que desejamos acessar. Você usaria a palavra-chave struct para definir variáveis ​​do tipo estrutura. O exemplo a seguir mostra como usar uma estrutura em um programa -
Demonstração ao vivo
#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;
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -
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

Estruturas como argumentos de função


Você pode passar uma estrutura como um argumento de função da mesma forma que passa qualquer outra variável ou ponteiro.
Demonstração ao vivo
#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);
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -
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

Ponteiros para estruturas


Você pode definir ponteiros para estruturas da mesma maneira que define ponteiro para qualquer outra variável -
struct Books *struct_pointer;

Agora, você pode armazenar o endereço de uma variável de estrutura na variável de ponteiro definida acima. Para encontrar o endereço de uma variável de estrutura, coloque o '&'; operador antes do nome da estrutura como segue −
struct_pointer = &Book1;

Para acessar os membros de uma estrutura usando um ponteiro para essa estrutura, você deve usar o operador → da seguinte forma −
struct_pointer->title;

Vamos reescrever o exemplo acima usando o ponteiro de estrutura.
Demonstração ao vivo
#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);
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -
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

Campos de bits


Campos de bits permitem o empacotamento de dados em uma estrutura. Isso é especialmente útil quando a memória ou o armazenamento de dados são escassos. Exemplos típicos incluem -

C nos permite fazer isso em uma definição de estrutura colocando :bit length após a variável. Por exemplo -
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;

Aqui, o pack_struct contém 6 membros:Quatro sinalizadores de 1 bit f1..f3, um tipo de 4 bits e um my_int de 9 bits.

C empacota automaticamente os campos de bits acima da forma mais compacta possível, desde que o comprimento máximo do campo seja menor ou igual ao comprimento da palavra inteira do computador. Se este não for o caso, alguns compiladores podem permitir sobreposição de memória para os campos, enquanto outros armazenariam o próximo campo na próxima palavra.

Linguagem C

  1. Estruturas e classes em C ++
  2. Semáforos:serviços utilitários e estruturas de dados
  3. Crítica do livro:digitalize ou morra
  4. Um futuro muito humano
  5. Tecnologia de armazenamento de dados magnéticos de última geração
  6. 17 Melhores livros de programação para ler em 2021
  7. Java - Estruturas de Dados
  8. C - typedef
  9. Estruturas de dados C++
  10. C# - Estruturas