Поиск по сайту:

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


На этой странице

  1. Структуры и функции языка программирования C
  2. Заключение

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

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

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

struct emp_details {

int emp_code;
int emp_age;

};

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

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

emp_details obj;

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

obj.emp_code
obj.emp_age

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

#include <stdio.h>

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("Enter employee code: ");
scanf("%d", &x);

printf("\n Enter employee age: ");
scanf("%d", &y);

struct emp_details new_obj;

new_obj = fill(x,y);

printf("\n The employee code and age you entered are: %d and %d", new_obj.emp_code, new_obj.emp_age);

return 0;
}

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

Теперь, как я упоминал ранее в заявлении выше, структуры также могут быть переданы в качестве аргументов функции. Ниже приведен пример, где функция fill принимает в качестве аргумента структуру emp_details.

#include <stdio.h>

struct emp_details {

int emp_code;
int emp_age;

};

void fill(struct emp_details obj)
{
printf("\n The employee code and age you entered are: %d and %d", obj.emp_code, obj.emp_age);
}

int main()
{
int x,y;

printf("Enter employee code: ");
scanf("%d", &x);

printf("\n Enter employee age: ");
scanf("%d", &y);

struct emp_details new_obj;
new_obj.emp_code = x;
new_obj.emp_age = y;

fill(new_obj);

return 0;
}

И вот результат в моем случае:

Enter employee code: 36 
Enter employee age: 29

The employee code and age you entered are: 36 and 29

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

struct emp_details *ptr;

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

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

Но для простоты C позволяет опустить * и . и используйте -> вместо этого. Ниже приведен пример:

ptr->emp_code
ptr->emp_age 

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

#include <stdio.h>

struct emp_details {

int emp_code;
int emp_age;

};

void fill(struct emp_details *obj)
{
printf("\n The employee code and age you entered are: %d and %d", obj->emp_code, obj->emp_age);
}

int main()
{
int x,y;

printf("Enter employee code: ");
scanf("%d", &x);

printf("\n Enter employee age: ");
scanf("%d", &y);

struct emp_details new_obj;
new_obj.emp_code = x;
new_obj.emp_age = y;

fill(&new_obj);

return 0;
}

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

Заключение

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