Yapıları Değer ile Aktarma
Coddy'nin C Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 46 / 63.
Artık yapılarla ve yapı işaretçileriyle nasıl çalışacağını bildiğine göre, yapıların tamamını işlevlere nasıl aktaracağını öğrenmenin zamanı geldi. Bir yapıyı bir işleve parametre olarak aktardığında, C değerle aktarma yöntemini kullanır; bu, işlevin yapının eksiksiz bir kopyasını aldığı anlamına gelir.
İşte bir yapı parametresini kabul eden bir fonksiyonun söz dizimi:
void functionName(struct StructureName parameterName) {
// Fonksiyon gövdesi
}Tanıdık Point struct'ımızı örnek olarak kullanarak:
void printPoint(struct Point p) {
printf("Point coordinates: (%d, %d)\n", p.x, p.y);
}Anlaşılması gereken temel kavram, fonksiyonun içinde struct üzerinde yaptığınız hiçbir değişikliğin çağıran fonksiyondaki özgün struct'ı etkilemeyeceğidir. Bunun nedeni, fonksiyonun verilerin kendi kopyasıyla çalışmasıdır.
Bu yaklaşım, özgün verilerde yanlışlıkla değişiklik yapma riski olmadan struct verilerini okumak veya görüntülemek istediğinizde kullanışlıdır. Ancak büyük struct'ları kopyalamanın bellek ve performans açısından verimsiz olabileceğini unutmayın.
Görev
KolayStruct'ları değerle fonksiyonlara geçirmeyi gösteren bir C programı oluştur. Programın şunları yapması gerekir:
- Aşağıdaki üyelerle
structadlı birRectangletanımla:- Dikdörtgenin genişliğini saklamak için bir tamsayı
width - Dikdörtgenin yüksekliğini saklamak için bir tamsayı
height - Dikdörtgenin rengini saklamak için boyutu 15 olan bir karakter dizisi
color
- Dikdörtgenin genişliğini saklamak için bir tamsayı
- Şunları yapan
displayRectangleadlı bir fonksiyon yaz:- Parametre olarak bir
Rectanglestruct'ı alır (değerle geçirme) - Dikdörtgen bilgilerini tam olarak şu biçimde yazdırır:
Rectangle Details:Width: [width]Height: [height]Color: [color]Area: [area]
- Alanı (genişlik × yükseklik) hesaplar ve yazdırır
- Parametre olarak bir
- Şunları yapan
modifyRectangleadlı bir fonksiyon yaz:- Parametre olarak bir
Rectanglestruct'ı alır (değerle geçirme) - Dikdörtgenin hem genişliğini hem de yüksekliğini iki katına çıkarır
- Rengi "Modified" olarak değiştirir
Inside modifyRectangle function:ifadesini yazdırır- Değiştirilmiş dikdörtgeni göstermek için
displayRectanglefonksiyonunu çağırır
- Parametre olarak bir
- main fonksiyonunda:
Rectangleadlı birrectdeğişkeni oluştur- Genişliği, yüksekliği ve rengi girdiden oku ve struct üyelerine ata
Original rectangle:ifadesini yazdır- Özgün dikdörtgeni göstermek için
displayRectanglefonksiyonunu çağır - Dikdörtgeni parametre olarak vererek
modifyRectanglefonksiyonunu çağır After modifyRectangle call:ifadesini yazdır- Özgün dikdörtgenin değişmediğini göstermek için
displayRectanglefonksiyonunu tekrar çağır
Bu görev, struct'larla değerle geçirme kavramını gösterir: bir struct'ı bir fonksiyona geçirdiğinde, fonksiyon struct'ın eksiksiz bir kopyasını alır. Fonksiyon içinde yapılan değişiklikler yalnızca kopyayı etkiler; çağıran fonksiyondaki özgün struct'ı etkilemez.
Kendin dene
#include <stdio.h>
#include <string.h>
// TODO: Rectangle yapısını burada tanımlayın
// TODO: displayRectangle fonksiyonunu burada yazın
// TODO: modifyRectangle fonksiyonunu burada yazın
int main() {
// Girdiyi oku
int width, height;
char color[15];
scanf("%d", &width);
scanf("%d", &height);
scanf("%s", color);
// TODO: Rectangle değişkenini oluşturun ve girdi değerlerini atayın
// TODO: "Original rectangle:" yazdırın ve displayRectangle fonksiyonunu çağırın
// TODO: modifyRectangle fonksiyonunu çağırın
// TODO: "After modifyRectangle call:" yazdırın ve displayRectangle fonksiyonunu tekrar çağırın
return 0;
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış bölümündeki tüm dersler
1Pointer Temelleri
Pointer Nedir?Pointer TanımlamaAdres Operatörü (&)Dereference Operatörü (*)NULL Pointer'larÖzet: Pointer Temelleri4Proje: Basit Metin Aracı
Projeye Genel BakışKarakter Sayma2İşaretçiler ve Diziler
İşaretçi Olarak Dizi İsimleriDizi Elemanları - İşaretçilerİşaretçi Aritmetiğiİşaretçilerin KarşılaştırılmasıÖzet: İşaretçi ile Dizi Gezinme5İşaretçiler ve Fonksiyonlar
Değer ile GeçmeFonksiyonlara İşaretçi Göndermeİşaretçiler ile Değişkenleri DeğiştirmeKlasik Bir Örnek: SwapFonksiyonlara Dizi GöndermeÖzet: Fonksiyon İşaretçi Argümanları8Yapılar ve İşaretçiler
Yapılara İşaretçilerOk Operatörü (->)Yapıları Değer ile AktarmaYapı İşaretçilerini AktarmaYapıların Dinamik TahsisiÖzet: Yapıyı Değiştirme - Ptr11Son Tekrar Görevleri
Tekrar: Dinamik String BirleştirmeTekrar: Struct DizisiTekrar: Kelime Frekans Sayacı3Karakter Dizileri ve Stringler
char Dizisi Olarak StringlerNull Sonlandırıcıscanf ile String Girişistrlen() Kullanımıstrcpy() Kullanımıstrcat() Kullanımıstrcmp() KullanımıÖzet: Temel String FonksiyonlarıKendi başına pratik yap: Online C derleyicisi