C Structuri
Structura din C este un tip de date definit de utilizator care poate fi folosit pentru a grupa articole de tipuri posibil diferite într-un singur tip. The cuvânt cheie struct este folosit pentru a defini structura în limbajul de programare C. Elementele din structură se numesc sale membru și pot fi de orice tip de date valide.
C Declarație de structură
Trebuie să declarăm structura în C înainte de a o folosi în programul nostru. În declarația de structură, specificăm variabilele sale membre împreună cu tipul lor de date. Putem folosi cuvântul cheie struct pentru a declara structura în C folosind următoarea sintaxă:
Sintaxă
struct structure_name { data_type member_name1; data_type member_name1; .... .... }; Sintaxa de mai sus se mai numește șablon de structură sau prototip de structură și nicio memorie nu este alocată structurii din declarație.
C Definiția structurii
Pentru a folosi structura în programul nostru, trebuie să definim instanța acesteia. Putem face asta prin crearea de variabile de tip structură. Putem defini variabilele de structură folosind două metode:
1. Declarație de variabile de structură cu șablon de structură
struct structure_name { data_type member_name1; data_type member_name1; .... .... } variable1, varaible2, ... ; 2. Declarație variabilă de structură după șablon de structură
// structure declared beforehand struct structure_name variable1, variable2 , .......;
Accesați membrii structurii
Putem accesa membrii structurii utilizând ( . ) operator punct.
Sintaxă
structure_name.member1; strcuture_name.member2;
În cazul în care avem un pointer către structură, putem folosi și operatorul săgeată pentru a accesa membrii.
Inițializați membrii structurii
Membrii structurii nu poate fi initializat cu declaratia. De exemplu, următorul program C eșuează la compilare.
struct Point { int x = 0; // COMPILER ERROR: cannot initialize members here int y = 0; // COMPILER ERROR: cannot initialize members here }; Motivul erorii de mai sus este simplu. Când un tip de date este declarat, nu i se alocă memorie. Memoria este alocată numai atunci când sunt create variabile.
Putem inițializa membrii structurii în 3 moduri, care sunt după cum urmează:
- Folosind Assignment Operator.
- Utilizarea Listei de inițializare.
- Utilizarea listei de inițializatori desemnate.
1. Inițializare folosind Assignment Operator
struct structure_name str; str.member1 = value1; str.member2 = value2; str.member3 = value3; . . .
2. Inițializarea utilizând Lista de inițializare
struct structure_name str = { value1, value2, value3 }; În acest tip de inițializare, valorile sunt atribuite în ordine secvențială, așa cum sunt declarate în șablonul de structură.
3. Inițializarea utilizând Lista de inițializare desemnată
Inițializarea desemnată permite inițializarea membrilor structurii în orice ordine. Această caracteristică a fost adăugată în standardul C99.
struct structure_name str = { .member1 = value1, .member2 = value2, .member3 = value3 }; Inițializarea desemnată este acceptată numai în C, dar nu și în C++.
Exemplu de structură în C
Următorul program C arată cum să utilizați structurile
C
// C program to illustrate the use of structures> #include> > // declaring structure with name str1> struct> str1 {> > int> i;> > char> c;> > float> f;> > char> s[30];> };> > // declaring structure with name str2> struct> str2 {> > int> ii;> > char> cc;> > float> ff;> } var;> // variable declaration with structure template> > // Driver code> int> main()> {> > // variable declaration after structure template> > // initialization with initializer list and designated> > // initializer list> > struct> str1 var1 = { 1,> 'A'> , 1.00,> 'techcodeview.com'> },> > var2;> > struct> str2 var3 = { .ff = 5.00, .ii = 5, .cc => 'a'> };> > > // copying structure using assignment operator> > var2 = var1;> > > printf> (> 'Struct 1:
i = %d, c = %c, f = %f, s = %s
'> ,> > var1.i, var1.c, var1.f, var1.s);> > printf> (> 'Struct 2:
i = %d, c = %c, f = %f, s = %s
'> ,> > var2.i, var2.c, var2.f, var2.s);> > printf> (> 'Struct 3
i = %d, c = %c, f = %f
'> , var3.ii,> > var3.cc, var3.ff);> > > return> 0;> }> |
Ieșire
Struct 1: i = 1, c = A, f = 1.000000, s = techcodeview.com Struct 2: i = 1, c = A, f = 1.000000, s = techcodeview.com Struct 3 i = 5, c = a, f = 5.000000
typedef pentru Structuri
The typedef cuvântul cheie este folosit pentru a defini un alias pentru tipul de date deja existent. În structuri, trebuie să folosim cuvântul cheie struct împreună cu numele structurii pentru a defini variabilele. Uneori, acest lucru crește lungimea și complexitatea codului. Putem folosi typedef pentru a defini un nou nume mai scurt pentru structură.
Exemplu
C
// C Program to illustrate the use of typedef with> // structures> #include> > // defining structure> struct> str1 {> > int> a;> };> > // defining new name for str1> typedef> struct> str1 str1;> > // another way of using typedef with structures> typedef> struct> str2 {> > int> x;> } str2;> > int> main()> {> > // creating structure variables using new names> > str1 var1 = { 20 };> > str2 var2 = { 314 };> > > printf> (> 'var1.a = %d
'> , var1.a);> > printf> (> 'var2.x = %d'> , var2.x);> > > return> 0;> }> |
Ieșire
var1.a = 20 var2.x = 314
Structuri imbricate
Limbajul C ne permite să inserăm o structură în alta ca membru. Acest proces se numește imbricare și astfel de structuri se numesc structuri imbricate. Există două moduri în care putem cuibari o structură în alta:
1. Imbricarea structurii încorporate
În această metodă, structura care este imbricată este de asemenea declarată în interiorul structurii părinte.
Exemplu
struct parent { int member1; struct member_str member2 { int member_str1; char member_str2; ... } ... } 2. Imbricare de structuri separate
În această metodă, două structuri sunt declarate separat și apoi structura membru este imbricată în structura părinte.
Exemplu
struct member_str { int member_str1; char member_str2; ... } struct parent { int member1; struct member_str member2; ... } Un lucru de remarcat aici este că declarația structurii ar trebui să fie întotdeauna prezentă înainte de definirea acesteia ca membru al structurii. De exemplu, cel declarația de mai jos este nevalidă deoarece struct mem nu este definit atunci când este declarat în interiorul structurii părinte.
struct parent { struct mem a; }; struct mem { int var; }; Accesarea membrilor imbricați
Putem accesa membri imbricați utilizând același operator punct ( . ) de două ori, așa cum se arată:
str_parent.str_child .member;
Exemplu de imbricare a structurii
C
// C Program to illustrate structure nesting along with> // forward declaration> #include> > // child structure declaration> struct> child {> > int> x;> > char> c;> };> > // parent structure declaration> struct> parent {> > int> a;> > struct> child b;> };> > // driver code> int> main()> {> > struct> parent var1 = { 25, 195,> 'A'> };> > > // accessing and printing nested members> > printf> (> 'var1.a = %d
'> , var1.a);> > printf> (> 'var1.b.x = %d
'> , var1.b.x);> > printf> (> 'var1.b.c = %c'> , var1.b.c);> > > return> 0;> }> |
Ieșire
var1.a = 25 var1.b.x = 195 var1.b.c = A
Structura indicator în C
Putem defini un pointer care indică spre structură ca orice altă variabilă. Astfel de indicatoare sunt în general numite Structura Indicatori . Putem accesa membrii structurii indicați de indicatorul de structură folosind ( -> ) operator săgeată.
Exemplu de Structure Pointer
C
// C program to illustrate the structure pointer> #include> > // structure declaration> struct> Point {> > int> x, y;> };> > int> main()> {> > struct> Point str = { 1, 2 };> > > // p2 is a pointer to structure p1> > struct> Point* ptr = &str;> > > // Accessing structure members using structure pointer> > printf> (> '%d %d'> , ptr->x, ptr->y);>>> |