Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C - Structuren

Met arrays kunnen type variabelen worden gedefinieerd die meerdere gegevensitems van dezelfde soort kunnen bevatten. Op dezelfde manier structuur is een ander door de gebruiker gedefinieerd gegevenstype dat beschikbaar is in C en waarmee gegevensitems van verschillende soorten kunnen worden gecombineerd.

Structuren worden gebruikt om een ​​record weer te geven. Stel dat u uw boeken in een bibliotheek wilt bijhouden. Misschien wilt u de volgende kenmerken van elk boek bijhouden −

  • Titel
  • Auteur
  • Onderwerp
  • Boek-ID

Een structuur definiëren

Om een ​​structuur te definiëren, moet u de struct . gebruiken uitspraak. De struc-instructie definieert een nieuw gegevenstype, met meer dan één lid. Het formaat van het struct-statement is als volgt −

struct [structure tag] {

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

De structuurtag is optioneel en elke liddefinitie is een normale variabeledefinitie, zoals int i; of zweven f; of een andere geldige variabeledefinitie. Aan het einde van de structuurdefinitie, vóór de laatste puntkomma, kunt u een of meer structuurvariabelen opgeven, maar dit is optioneel. Dit is de manier waarop u de Boekstructuur zou declareren −

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

Toegang tot structuurleden

Om toegang te krijgen tot een lid van een structuur, gebruiken we de lidtoegangsoperator (.) . De operator voor toegang tot het lid is gecodeerd als een punt tussen de naam van de structuurvariabele en het structuurlid waartoe we toegang willen. U zou het trefwoord struct . gebruiken om variabelen van het structuurtype te definiëren. Het volgende voorbeeld laat zien hoe je een structuur in een programma gebruikt −

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

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op −

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

Structuren als functieargumenten

U kunt een structuur als een functieargument doorgeven op dezelfde manier als elke andere variabele of aanwijzer.

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

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op −

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

Aanwijzingen voor structuren

U kunt pointers naar structuren op dezelfde manier definiëren als pointers naar elke andere variabele −

struct Books *struct_pointer;

Nu kunt u het adres van een structuurvariabele opslaan in de hierboven gedefinieerde pointervariabele. Om het adres van een structuurvariabele te vinden, plaatst u de '&'; operator voor de naam van de structuur als volgt −

struct_pointer = &Book1;

Om toegang te krijgen tot de leden van een structuur met een aanwijzer naar die structuur, moet u de → operator als volgt gebruiken −

struct_pointer->title;

Laten we het bovenstaande voorbeeld herschrijven met de structuuraanwijzer.

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

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op −

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

Bitvelden

Bitvelden maken het mogelijk om gegevens in een structuur in te pakken. Dit is vooral handig wanneer geheugen of gegevensopslag kostbaar is. Typische voorbeelden zijn −

  • Meerdere objecten in een machinewoord inpakken. bijv. 1-bits vlaggen kunnen worden gecomprimeerd.

  • Externe bestandsindelingen lezen -- niet-standaard bestandsindelingen kunnen worden ingelezen, bijvoorbeeld 9-bits gehele getallen.

C stelt ons in staat om dit in een structuurdefinitie te doen door :bit lengte achter de variabele te plaatsen. Bijvoorbeeld −

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;

Hier bevat de pack_struct 6 leden:vier 1-bits vlaggen f1..f3, een 4-bits type en een 9-bits my_int.

C pakt de bovenstaande bitvelden automatisch zo compact mogelijk in, op voorwaarde dat de maximale lengte van het veld kleiner is dan of gelijk is aan de gehele woordlengte van de computer. Als dit niet het geval is, kunnen sommige compilers geheugenoverlapping voor de velden toestaan, terwijl andere het volgende veld in het volgende woord opslaan.


C Taal

  1. Structuren en klassen in C++
  2. Semaphores:nutsvoorzieningen en datastructuren
  3. Boekrecensie:Digitaliseer of sterf
  4. Een zeer menselijke toekomst
  5. Nieuwe generatie magnetische gegevensopslagtechnologie
  6. 17 beste programmeerboeken om te lezen in 2021
  7. Java - Gegevensstructuren
  8. C - typedef
  9. C++-gegevensstructuren
  10. C# - Structuren
  11. Hoe 3D-geprinte roosterstructuren onderdelen kunnen verbeteren