Uvod u gnijezdenu strukturu u C
Bilo koji programski jezik ima svoj način definiranja i opisivanja struktura. Dakle, ugniježđene strukture, kao što mu ime govori u C, svojevrsno su definiranje jedne strukture unutar druge strukture. Bilo koja varijabla članica može se definirati unutar strukture, a ona zauzvrat može premjestiti u drugu strukturu. Promjenjive unutar strukture mogu biti bilo što poput normalnog ili pokazivača ili bilo čega i mogu se postaviti bilo gdje u strukturi.
Umetanoj strukturi se može pristupiti na dva načina:
- Struktura unutar strukture u C pomoću varijable pokazivača.
- Struktura unutar strukture u C koristeći normalnu varijablu.
Sintaksa:
Slijedi sintaksa za stvaranje ugniježđene strukture:
structure tagname_1
(
var_1;
var_2;
var_3;
.
.
.
.
var n;
structure tagname_2
(
var_1;
var_2;
var_3;
.
.
.
var_n;
), mem1
) mem2;
Obrada gnijezdane građevine u C
Iz gornje sintakse možemo zaključiti da će mem1 struktura ugniježđena unutar članske strukture sadržavati člana ili varijablu kojoj se može pristupiti i svima može pristupiti na ugniježđen način koristeći se. (dot) operator.
- mem2.mem1.var_1: ovo se odnosi na prvog člana varijable strukture tagname_1.
- mem2.mem1.var_2: ovo se odnosi na drugog člana varijable strukture tagname_2.
Uzet ćemo više primjera da bismo dobili jasnost o tome kako sintaksa zadovoljava rad ugniježđene strukture.
Primjeri br. 1
struct employee
(
struct man
(
char name (20);
int age;
char dob(10);
) d;
int empid;
char desg(10);
) emp;
U gornjem primjeru struktura čovjeka definirana je unutar strukture zaposlenika koja je ugniježđena struktura. Članovima unutar ugniježđene strukture koja je muškarac može se pristupiti pomoću donje sintakse ili formata.
Kao u datom primjeru
- Ime zaposlenika.d.: govori o imenu čovjeka unutar strukture zaposlenika.
- Employe.d .age: Pričaće o dobi čovjeka kao zaposlenika.
Važno je uočiti jednu stvar poput ove strukture, čovjek unutar strukture zaposlenika ne može se ponovo upotrijebiti, što znači da se ne može ponovno pozvati nigdje u cijelom kodu jer nije sam generiran.
Umjesto toga, za to je moguće riješiti:
Mogli smo definirati strukturu izvana i tada smo mogli proglasiti varijablu unutar strukture, gdje god bismo joj željeli pristupiti u cijelom kodu.
Primjeri br. 2
Struct man
(
char name(20);
int age;
char dob (10);
);
Također, ovu strukturu može ponovo koristiti vanjska struktura.
struct employee
(
struct man info;
int id;
char desg (10);
)
Prednost upotrebe ove vrste deklaracije strukture je u tome što možemo proglasiti varijablu tipa type type čovjek bilo gdje u cijelom programu.
Napomena: Nikada nije dopušteno umetanje strukture u sebe.Pogledajmo primjer kako nije dopušteno gniježđenje strukture unutar sebe.
struct teacher
(
char name(20);
char address(100);
int age();
struct teacher principal; // totally invalid way to create nested structure.
)
Primjeri ugniježđenih struktura u C
Ispod su različiti primjeri ugniježđene strukture u C:
Primjer 1 - Inicijalizacija ugniježđenih struktura:
Inicijalizacija ugniježđenih struktura moguća je u trenutku deklaracije.
Kodirati:
struct student
(
struct person info;
int rollno;
float marks(10);
)
struct student student_1 = (
("Anji", 26, 1995),
103,
92
);
Primjer
Kodirati:
#include
struct person
(
char name(20);
int age;
char dob(10);
);
struct student
(
struct person info;
int roll_no;
float marks;
);
int main ()
(
struct student p1;
printf("Details of student: \n\n");
printf("Enter name: ");
scanf("%s", p1.info.name);
printf("Enter age: ");
scanf("%d", &p1.info.age);
printf("Enter dob: ");
scanf ("%s", p1.info.dob);
printf("Enter roll no: ");
scanf("%d", &p1.roll_no);
printf("Enter marks: ");
scanf ("%f", &p1.marks);
printf("\n…………………..\n\n");
printf("Name: %s\n", p1.info.name);
printf("Age: %d\n", p1.info.age);
printf("DOB: %s\n", p1.info.dob);
printf("Roll no: %d\n", p1.roll_no);
printf("Marks: %.2f\n", p1.marks);
return 0;
)
Izlaz:
Primjer br. 2 - Pristup članovima unutar ugniježđene strukture pomoću pokazivača:
Kodirati:
#include
#include
struct student_college_info
(
int college_id;
char college_name(50);
);
struct student_info
(
int id;
char name(20);
float percentage;
struct student_college_info clg_data;
) stu_data, *stu_data_ptr;
int main()
(
struct student_info stu_data = (2, "Anu", 92.5, 81145,
"SRM University");
stu_data_ptr = &stu_data;
printf(" Id is: %d \n", stu_data_ptr->id);
printf(" Name is: %s \n", stu_data_ptr->name);
printf(" Percentage is: %f \n\n",
stu_data_ptr->percentage);
printf(" College Id is: %d \n",
stu_data_ptr->clg_data.college_id);
printf(" College Name is: %s \n",
stu_data_ptr->clg_data.college_name);
return 0;
)
Izlaz:
Primjer 3 - Donošenje člana strukture kao argumenta za funkcioniranje:
Kodirati:
struct teacher
(
char name (20);
int id;
int marks;
);
void print_struct (char name (), int id, int marks);
int main ()
(
struct teacher tea = ("nidhi", 5, 52);
print_struct (tea.name, tea.id, tea.marks);
return 0;
)
void print_struct (char name (), int id, int marks)
(
printf ("Name: %s\n", name);
printf ("id: %d\n", id);
printf ("Marks: %d\n", marks);
printf("\n");
)
Izlaz:
Primjer # 4 - Struktura unutar strukture koristeći normalnu varijablu.
Kodirati:
#include
#include
struct student_college_detail
(
nt college_id;
char college_name(50);
);
struct student_detail
(
int id;
char name(20);
float percentage;
struct student_college_detail clg_data;
) stu_data;
int main()
(
struct student_detail stu_data = (8, "Moam", 50.5, 562345,
"CSS University");
printf(" Id is: %d \n", stu_data.id);
printf(" Name is: %s \n", stu_data.name);
printf(" Percentage is: %f \n\n", stu_data.percentage);
nbsp;
printf(" College Id is: %d \n",
stu_data.clg_data.college_id);
printf(" College Name is: %s \n",
stu_data.clg_data.college_name);
return 0;
)
Izlaz:
Primjer
Kodirati:
#include
#include
struct student
(
int id1;
int id2;
char e;
char f;
float percentage;
);
int main ()
(
int i;
struct student recrd1 = (3, 4, 'C', 'B', 80.5);
printf ("size of structure in bytes: %d\n",
sizeof(recrd1));
printf ("\nAddress of id1 = %u", &recrd1.id1);
printf("\nAddress of id2 = %u", &recrd1.id2 );
printf("\nAddress of a = %u", &recrd1.e );
printf("\nAddress of b = %u", &recrd1.f );
printf("\nAddress of percentage = %u”, &recrd1.percentage);
return 0;
)
Izlaz:
Zaključak
Strukture u C-u vrlo su zanimljiv način grupiranja i grupiranja svih korisnički definiranih varijabli i funkcija u jednu cjelinu. Ali ipak, ona ima određena ograničenja poput toga što ne dopušta varijablama strukture i čitavoj strukturi da sadrže ugrađene tipove podataka i ne koristi operatore. Stoga bi se u samoj budućnosti možda moglo voditi računa o ovim značajkama.
Preporučeni članci
Ovo je vodič za gniježđenu strukturu u C. Ovdje ćemo raspravljati o radu na gnijezdanoj strukturi u C zajedno s različitim primjerima i implementacijom koda. Možete pogledati i sljedeći članak da biste saznali više -
- Top 11 značajki C ++
- Primjeri uzoraka u C programiranju
- Algoritam C programiranja množenja matrice
- Važnost C # generike