Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык 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

  1. Понимание структур в C#: определение, использование и ключевые отличия
  2. Дружественные функции и классы в C++: мастерство контроля доступа
  3. Освоение структур в C: определение, переменные, доступ и продвинутые примеры
  4. Освоение структур и указателей в C: практическое руководство
  5. Структура программы на C: разбор Hello World и процесс компиляции
  6. Типы данных в C: полное руководство по целочисленным, вещественным и производным типам
  7. Константы и литералы в C: целочисленные, вещественные, символьные, строковые и определение констант
  8. Функции в C: объявление, определение, вызов, аргументы (по значению и по ссылке), рекурсия
  9. Перегрузка в C++: функции и операторы — подробное руководство
  10. Электрические трансформаторы: функция, конструкция и промышленное применение