Программирование · 3 min read · Nov 18, 2025

Учебник по программированию на C для Linux Часть 26 - Структуры и функции

В одном из наших предыдущих учебников по командной строке мы затрагивали концепцию структур. Используя простые примеры, мы обсудили основные вещи, такие как что такое структуры и зачем они нужны. Расширяя эту тему, в этом учебнике мы обсудим, как структуры и функции могут использоваться вместе.

Структуры и функции в языке программирования C

Прежде чем мы начнем, давайте быстро освежим, как объявляется структура. Вот пример:

struct emp_details {  
 
 int emp_code;  
 int emp_age;  
 
};

Итак, здесь ключевое слово struct - которое обязательно, если вы определяете структуру в C - обозначает начало объявления. За ним следует тег, или вы можете сказать, имя структуры. Затем, внутри фигурных скобок, у вас есть две целочисленные переменные, которые сгруппированы вместе как часть этой структуры.

Чтобы использовать эту структуру, вам сначала нужно определить ее экземпляр или объект. Вы можете сделать это следующим образом:

emp_details obj;

А затем члены структуры могут быть доступны следующим образом:

obj.emp_code  
obj.emp_age

Теперь, переходя к функциям, функция может возвращать структуры, а также принимать структуры в виде аргументов. Вот пример:

#include   
  
struct emp_details {  
  
 int emp_code;  
 int emp_age;  
  
};  
  
struct emp_details fill(int code, int age)  
{  
 struct emp_details obj;  
 obj.emp_code = code;  
 obj.emp_age = age;  
  
 return obj;  
}  
  
int main()  
{  
 int x,y;  
  
 printf("Введите код сотрудника: ");  
 scanf("%d", &x);  
  
 printf("\n Введите возраст сотрудника: ");  
 scanf("%d", &y);  
  
 struct emp_details new_obj;  
  
 new_obj = fill(x,y);  
  
 printf("\n Код сотрудника и возраст, которые вы ввели: %d и %d", new_obj.emp_code, new_obj.emp_age);  
  
 return 0;  
}

Итак, здесь, в этом примере, у нас есть функция ‘fill’, которая принимает два целых числа, рассматривает их как код и возраст, заполняет структуру на основе этой информации и возвращает структуру по значению вызывающему функцию.

Теперь, как я упоминал ранее в одном из заявлений выше, структуры также могут передаваться в качестве аргументов функции. Следующий пример, где функция ‘fill’ принимает структуру ‘emp_details’ в качестве аргумента.

#include   
  
struct emp_details {  
  
 int emp_code;  
 int emp_age;  
  
};  
  
void fill(struct emp_details obj)  
{  
 printf("\n Код сотрудника и возраст, которые вы ввели: %d и %d", obj.emp_code, obj.emp_age);  
}  
  
int main()  
{  
 int x,y;  
  
 printf("Введите код сотрудника: ");  
 scanf("%d", &x);  
  
 printf("\n Введите возраст сотрудника: ");  
 scanf("%d", &y);  
  
 struct emp_details new_obj;  
 new_obj.emp_code = x;  
 new_obj.emp_age = y;  
  
 fill(new_obj);  
  
 return 0;  
}

И вот вывод в моем случае:

Введите код сотрудника: 36   
 Введите возраст сотрудника: 29   
   
 Код сотрудника и возраст, которые вы ввели: 36 и 29

Двигаясь дальше, как и обычные переменные, массивы и многое другое, могут быть указатели на структуры. Вот пример:

struct emp_details *ptr;

Как всегда, указатели приходят на помощь в случае, если размер структуры велик, и вы передаете его в качестве аргумента функции. В идеале, вот как вы можете получить доступ к переменным структуры через указатели:

(*ptr).emp_code  
(*ptr).emp_age

Но для простоты C позволяет вам опустить * и . и использовать ‘->’ вместо этого. Следующий пример:

ptr->emp_code  
ptr->emp_age 

Вот пример, который использует указатель на структуру:

#include   
  
struct emp_details {  
  
 int emp_code;  
 int emp_age;  
  
};  
  
void fill(struct emp_details *obj)  
{  
 printf("\n Код сотрудника и возраст, которые вы ввели: %d и %d", obj->emp_code, obj->emp_age);  
}  
  
int main()  
{  
 int x,y;  
  
 printf("Введите код сотрудника: ");  
 scanf("%d", &x);  
  
 printf("\n Введите возраст сотрудника: ");  
 scanf("%d", &y);  
  
 struct emp_details new_obj;  
 new_obj.emp_code = x;  
 new_obj.emp_age = y;  
  
 fill(&new_obj);  
  
 return 0;  
}

Хотя это тот же пример, который мы использовали ранее, изменения - так как мы теперь используем указатель на структуру - выделены жирным шрифтом.

Заключение

В этом учебнике мы расширили наше понимание структур, обсудив, как функции и структуры могут использоваться вместе. Вам предлагается попробовать примеры, которые мы использовали здесь, на вашей локальной системе. В случае любых сомнений или вопросов оставьте комментарий ниже.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.