Gnijezdana struktura u C - Obrada gnijezdane strukture u C s primjerima

Sadržaj:

Anonim

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:

  1. Struktura unutar strukture u C pomoću varijable pokazivača.
  2. 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:

Napomena: Iako je dobro proslijediti varijable strukture kao argument jer nam omogućava da prosljeđujemo sve članove strukture na funkcioniranje, ali to još uvijek nije uobičajena metoda.

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 -

  1. Top 11 značajki C ++
  2. Primjeri uzoraka u C programiranju
  3. Algoritam C programiranja množenja matrice
  4. Važnost C # generike