Menu
Coddy logo textTech

Передача структур по значению

Часть раздела Logic & Flow путешествия по C на Coddy — урок 46 из 63.

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

Вот синтаксис функции, которая принимает структуру в качестве параметра:

void functionName(struct StructureName parameterName) {
    // Тело функции
}

Используя нашу знакомую структуру Point в качестве примера:

void printPoint(struct Point p) {
    printf("Point coordinates: (%d, %d)\n", p.x, p.y);
}

Ключевая концепция, которую необходимо понять, заключается в том, что любые изменения, которые вы вносите в struct внутри function, не повлияют на исходный struct в вызывающей function. Это связано с тем, что function работает со своей собственной копией данных.

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

challenge icon

Задание

Легко

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

  1. Определить struct с именем Rectangle со следующими полями:
    • Целое число width для хранения ширины прямоугольника
    • Целое число height для хранения высоты прямоугольника
    • Символьный массив color размером 15 для хранения цвета прямоугольника
  2. Написать функцию с именем displayRectangle, которая:
    • Принимает структуру Rectangle в качестве параметра (передача по значению)
    • Выводит информацию о прямоугольнике в точно таком же формате:
      • Rectangle Details:
      • Width: [width]
      • Height: [height]
      • Color: [color]
      • Area: [area]
    • Вычисляет и выводит площадь (width × height)
  3. Написать функцию с именем modifyRectangle, которая:
    • Принимает структуру Rectangle в качестве параметра (передача по значению)
    • Удваивает и ширину, и высоту прямоугольника
    • Меняет цвет на "Modified"
    • Выводит Inside modifyRectangle function:
    • Вызывает displayRectangle, чтобы показать измененный прямоугольник
  4. В функции main:
    • Создать переменную типа Rectangle с именем rect
    • Считать ширину, высоту и цвет из входных данных и присвоить их полям структуры
    • Вывести Original rectangle:
    • Вызвать displayRectangle, чтобы показать исходный прямоугольник
    • Вызвать modifyRectangle, передав структуру
    • Вывести After modifyRectangle call:
    • Снова вызвать displayRectangle, чтобы показать, что исходный прямоугольник не изменился

Эта задача демонстрирует ключевую концепцию передачи структур по значению: когда вы передаете структуру в функцию, функция получает полную копию структуры. Любые изменения, внесенные внутри функции, влияют только на копию, а не на оригинальную структуру в вызывающей функции.

Попробуйте сами

#include <stdio.h>
#include <string.h>

// TODO: Определите структуру Rectangle здесь

// TODO: Напишите функцию displayRectangle здесь

// TODO: Напишите функцию modifyRectangle здесь

int main() {
    // Считать входные данные
    int width, height;
    char color[15];
    
    scanf("%d", &width);
    scanf("%d", &height);
    scanf("%s", color);
    
    // TODO: Создайте переменную Rectangle и присвойте ей входные значения
    
    // TODO: Выведите "Original rectangle:" и вызовите displayRectangle
    
    // TODO: Вызовите modifyRectangle
    
    // TODO: Выведите "After modifyRectangle call:" и снова вызовите displayRectangle
    
    return 0;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Logic & Flow