Увод у гнездену структуру у Ц
Било који програмски језик има свој начин дефинирања и описивања структура. Дакле, гнездеће структуре, као што само име каже на Ц, су врста дефинисања једне структуре унутар друге структуре. Било која варијабла члана може се дефинисати унутар структуре и заузврат, та структура се може даље преместити у другу структуру. Варијабле унутар структуре могу бити било шта попут нормалног или показивача или било чега и могу се поставити било где у структури.
Гнезденој структури се може приступити на два начина:
- Структура унутар структуре у Ц помоћу варијабле показивача.
- Структура унутар структуре у Ц користећи нормалну варијаблу.
Синтакса:
Слиједи синтакса за стварање угнијежђене структуре:
structure tagname_1
(
var_1;
var_2;
var_3;
.
.
.
.
var n;
structure tagname_2
(
var_1;
var_2;
var_3;
.
.
.
var_n;
), mem1
) mem2;
Обрада гнездеће структуре у Ц
Из горње синтаксе можемо закључити да ће мем1 структура угнијежђена унутар чланске структуре садржавати члана или варијаблу којој се може приступити и да се свима може приступити на угнијежђен начин помоћу. (тачка) оператора.
- мем2.мем1.вар_1: Ово се односи на првог члана променљиве структуре тагнаме_1.
- мем2.мем1.вар_2: Ово се односи на другог члана променљиве структуре тагнаме_2.
Даћемо јасније како синтакса задовољава рад угнијежђене структуре.
Примери бр. 1
struct employee
(
struct man
(
char name (20);
int age;
char dob(10);
) d;
int empid;
char desg(10);
) emp;
У горњем примеру, човекова структура је дефинисана унутар структуре запосленика која је угнијежђена структура. Члановима унутар угнијежђене структуре која је мушкарац може се приступити помоћу доње синтаксе или формата.
Као у датом примеру
- Име запосленог.д.: говори о имену човека у структури запослених.
- Број запосленика.д.: Причаће о старости човека као запосленог.
Важно је примјетити једну ствар као што је ова структура, човјек унутар структуре запосленика не може се поново употријебити, што значи да се не може поново позвати нигдје у цијелом коду јер није генерисан сам.
Уместо тога, решење за то може бити:
Могли смо дефинисати структуру извана и тада смо могли прогласити променљиву унутар структуре, где год желимо да јој приступимо кроз шифру.
Примери бр. 2
Struct man
(
char name(20);
int age;
char dob (10);
);
Такође, ова структура се може поново користити спољашњом структуром.
struct employee
(
struct man info;
int id;
char desg (10);
)
Предност употребе ове врсте декларације структуре је у томе што ми можемо декларисати променљиву врсту типе струцтуре било где у току програма.
Напомена: Никада није дозвољено уметање структуре у себе.Погледајмо пример како није дозвољено уметање структуре унутар себе.
struct teacher
(
char name(20);
char address(100);
int age();
struct teacher principal; // totally invalid way to create nested structure.
)
Примери угнездених структура у Ц
Испод су различити примери угнијежђене структуре на Ц:
Пример # 1 - Иницијализација угнежђених структура:
Иницијализација угнијежђених структура могућа је у тренутку декларације.
Шифра:
struct student
(
struct person info;
int rollno;
float marks(10);
)
struct student student_1 = (
("Anji", 26, 1995),
103,
92
);
Пример
Шифра:
#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;
)
Излаз:
Пример бр. 2 - Приступ члановима унутар угнијежђене структуре помоћу показивача:
Шифра:
#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;
)
Излаз:
Пример # 3 - Доношење члана структуре као аргумента за функцију:
Шифра:
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");
)
Излаз:
Пример # 4 - Структура унутар структуре користећи нормалну променљиву.
Шифра:
#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;
)
Излаз:
Пример
Шифра:
#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;
)
Излаз:
Закључак
Структуре на Ц-у су врло занимљив начин за групирање и груписање свих кориснички дефинисаних променљивих и функција у један ентитет. Али ипак, она има одређена ограничења као што не дозвољава да променљиве структуре и цела структура садрже уграђене типове података и не користе операторе. Стога се у самој будућности можда ове могућности могу побринути.
Препоручени чланци
Ово је водич за гнездену структуру у Ц. Овде смо расправљали о раду на Нестизираној структури у Ц заједно са различитим примерима и имплементацијом кода. Такође можете погледати следећи чланак да бисте сазнали више -
- Топ 11 карактеристика Ц ++
- Примери образаца у Ц програмирању
- Алгоритам Ц програмирања множења матрице
- Важност Ц # генерике