Menu
Coddy logo textTech

Przekazywanie struktur przez wartość

Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 46 z 63.

Skoro wiesz już, jak pracować ze strukturami i wskaźnikami do struktur, czas nauczyć się przekazywać całe struktury do funkcji. Gdy przekazujesz strukturę do funkcji jako parametr, C stosuje przekazywanie przez wartość, co oznacza, że funkcja otrzymuje pełną kopię struktury.

Oto składnia funkcji, która przyjmuje parametr typu struct:

void functionName(struct StructureName parameterName) {
    // Ciało funkcji
}

Posługując się znaną nam strukturą Point jako przykładem:

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

Kluczową kwestią, którą należy zrozumieć, jest to, że wszelkie zmiany wprowadzone w strukturze wewnątrz funkcji nie wpłyną na oryginalną strukturę w funkcji wywołującej. Dzieje się tak, ponieważ funkcja pracuje na własnej kopii danych.

To podejście jest przydatne, gdy chcesz odczytywać lub wyświetlać dane struktury bez ryzyka przypadkowego zmodyfikowania oryginału. Pamiętaj jednak, że kopiowanie dużych struktur może być nieefektywne pod względem pamięci i wydajności.

challenge icon

Wyzwanie

Łatwy

Utwórz program w C, który demonstruje przekazywanie struktur do funkcji przez wartość. Twój program powinien:

  1. Zdefiniować struct o nazwie Rectangle z następującymi składowymi:
    • Liczbę całkowitą width do przechowywania szerokości prostokąta
    • Liczbę całkowitą height do przechowywania wysokości prostokąta
    • Tablicę znaków color o rozmiarze 15 do przechowywania koloru prostokąta
  2. Napisać funkcję o nazwie displayRectangle, która:
    • Przyjmuje strukturę Rectangle jako parametr (przekazywanie przez wartość)
    • Wypisuje informacje o prostokącie w dokładnie takim formacie:
      • Rectangle Details:
      • Width: [width]
      • Height: [height]
      • Color: [color]
      • Area: [area]
    • Oblicza i wypisuje pole (szerokość × wysokość)
  3. Napisać funkcję o nazwie modifyRectangle, która:
    • Przyjmuje strukturę Rectangle jako parametr (przekazywanie przez wartość)
    • Podwaja szerokość i wysokość prostokąta
    • Zmienia kolor na "Modified"
    • Wypisuje Inside modifyRectangle function:
    • Wywołuje displayRectangle, aby wyświetlić zmodyfikowany prostokąt
  4. W funkcji main:
    • Utworzyć zmienną typu Rectangle o nazwie rect
    • Odczytać szerokość, wysokość i kolor z wejścia oraz przypisać je do składowych struktury
    • Wypisać Original rectangle:
    • Wywołać displayRectangle, aby wyświetlić oryginalny prostokąt
    • Wywołać modifyRectangle z prostokątem
    • Wypisać After modifyRectangle call:
    • Ponownie wywołać displayRectangle, aby pokazać, że oryginalny prostokąt pozostał bez zmian

To wyzwanie pokazuje kluczową koncepcję przekazywania struktur przez wartość: gdy przekazujesz strukturę do funkcji, funkcja otrzymuje jej pełną kopię. Wszelkie modyfikacje wprowadzone wewnątrz funkcji dotyczą wyłącznie kopii, a nie oryginalnej struktury w funkcji wywołującej.

Spróbuj swoich sił

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

// TODO: Zdefiniuj tutaj strukturę Rectangle

// TODO: Napisz tutaj funkcję displayRectangle

// TODO: Napisz tutaj funkcję modifyRectangle

int main() {
    // Wczytaj dane wejściowe
    int width, height;
    char color[15];
    
    scanf("%d", &width);
    scanf("%d", &height);
    scanf("%s", color);
    
    // TODO: Utwórz zmienną typu Rectangle i przypisz jej wartości z danych wejściowych
    
    // TODO: Wypisz "Original rectangle:" i wywołaj displayRectangle
    
    // TODO: Wywołaj modifyRectangle
    
    // TODO: Wypisz "After modifyRectangle call:" i ponownie wywołaj displayRectangle
    
    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i sterowanie przepływem

Poćwicz samodzielnie: Kompilator C online