Программирование · 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;
} Хотя это тот же пример, который мы использовали ранее, изменения - так как мы теперь используем указатель на структуру - выделены жирным шрифтом.
Заключение
В этом учебнике мы расширили наше понимание структур, обсудив, как функции и структуры могут использоваться вместе. Вам предлагается попробовать примеры, которые мы использовали здесь, на вашей локальной системе. В случае любых сомнений или вопросов оставьте комментарий ниже.
Get new posts in your inbox
No spam. Unsubscribe anytime.