Освоение структур в C: передача, возврат и работа по ссылке
Структуры в C: передача, возврат и работа по ссылке
В программировании на C структуры позволяют группировать связанные данные в единую сущность. Это руководство проведет вас через три основные операции со структурами: передачу в функции, возврат из функций и манипуляцию по ссылке. Каждый раздел включает краткое объяснение и рабочий пример для закрепления понимания.
Передача структур в функции
Как и встроенные типы, переменные структур можно передавать напрямую в функцию. Перед погружением полезно повторить структуры в C, функции в C и пользовательские функции.
- Структуры в C
- Функции в C
- Пользовательская функция
Следующий пример демонстрирует передачу struct student в функцию, выводящую ее содержимое.
#include <stdio.h>
struct student {
char name[50];
int age;
};
// Прототип функции
void display(struct student s);
int main() {
struct student s1;
printf("Enter name: ");
scanf("%[^ ]%%*c", s1.name); // читаем до новой строки
printf("Enter age: ");
scanf("%d", &s1.age);
display(s1); // передаем структуру в функцию
return 0;
}
void display(struct student s) {
printf("\nDisplaying information\n");
printf("Name: %s", s.name);
printf("\nAge: %d", s.age);
}
Вывод
Enter name: Bond Enter age: 13 Displaying information Name: Bond Age: 13
Возврат структуры из функции
Функции могут возвращать целые структуры, обеспечивая чистое разделение сбора и обработки данных. Пример ниже собирает информацию о студенте внутри функции и возвращает ее в main.
#include <stdio.h>
struct student {
char name[50];
int age;
};
// Прототип функции
struct student getInformation();
int main() {
struct student s;
s = getInformation();
printf("\nDisplaying information\n");
printf("Name: %s", s.name);
printf("\nAge: %d", s.age);
return 0;
}
struct student getInformation() {
struct student s1;
printf("Enter name: ");
scanf("%[^ ]%%*c", s1.name);
printf("Enter age: ");
scanf("%d", &s1.age);
return s1;
}
Тип возвращаемого значения функции совпадает со структурой, которую она возвращает, обеспечивая безопасность типов и ясность.
Передача структуры по ссылке
Когда функция должна изменить структуру, передайте ее адрес (указатель). Это аналогично передаче встроенных типов по ссылке. Следующий пример складывает два комплексных числа и сохраняет результат через указатель.
#include <stdio.h>
typedef struct Complex {
float real;
float imag;
} complex;
void addNumbers(complex c1, complex c2, complex *result);
int main() {
complex c1, c2, result;
printf("For first number,\n");
printf("Enter real part: ");
scanf("%f", &c1.real);
printf("Enter imaginary part: ");
scanf("%f", &c1.imag);
printf("For second number,\n");
printf("Enter real part: ");
scanf("%f", &c2.real);
printf("Enter imaginary part: ");
scanf("%f", &c2.imag);
addNumbers(c1, c2, &result);
printf("\nresult.real = %.1f\n", result.real);
printf("result.imag = %.1f", result.imag);
return 0;
}
void addNumbers(complex c1, complex c2, complex *result) {
result->real = c1.real + c2.real;
result->imag = c1.imag + c2.imag;
}
Вывод
For first number, Enter real part: 1.1 Enter imaginary part: -2.4 For second number, Enter real part: 3.4 Enter imaginary part: -3.2 result.real = 4.5 result.imag = -5.6
Поскольку result передается по ссылке, любые изменения внутри addNumbers немедленно отражаются на переменной в main.
Освоив эти техники, вы сможете писать более модульный, читаемый и эффективный код на C, используя всю мощь структур.
Язык C
- Понимание структур в C#: определение, использование и ключевые отличия
- Дружественные функции и классы в C++: мастерство контроля доступа
- Освоение структур в C: определение, переменные, доступ и продвинутые примеры
- Освоение структур и указателей в C: практическое руководство
- Структура программы на C: разбор Hello World и процесс компиляции
- Типы данных в C: полное руководство по целочисленным, вещественным и производным типам
- Константы и литералы в C: целочисленные, вещественные, символьные, строковые и определение констант
- Функции в C: объявление, определение, вызов, аргументы (по значению и по ссылке), рекурсия
- Перегрузка в C++: функции и операторы — подробное руководство
- Электрические трансформаторы: функция, конструкция и промышленное применение