Mengirim Struct berdasarkan Nilai
Termasuk bagian Logika dan Alur dalam perjalanan C di Coddy. Pelajaran 46 dari 63.
Sekarang setelah kamu tahu cara bekerja dengan struct dan pointer ke struct, saatnya belajar cara meneruskan seluruh struct ke fungsi. Saat kamu meneruskan struct ke fungsi sebagai parameter, C menggunakan pass-by-value, yang berarti fungsi menerima salinan lengkap struct tersebut.
Berikut sintaks untuk fungsi yang menerima parameter struct:
void functionName(struct StructureName parameterName) {
// Isi fungsi
}Menggunakan struct Point yang sudah kita kenal sebagai contoh:
void printPoint(struct Point p) {
printf("Point coordinates: (%d, %d)\n", p.x, p.y);
}Konsep utama yang perlu kamu pahami adalah bahwa perubahan apa pun yang kamu buat pada struct di dalam fungsi tidak akan memengaruhi struct asli di fungsi pemanggil. Ini karena fungsi bekerja dengan salinan datanya sendiri.
Pendekatan ini berguna saat kamu ingin membaca atau menampilkan data struct tanpa berisiko mengubah data aslinya secara tidak sengaja. Namun, perlu diingat bahwa menyalin struct berukuran besar dapat mengurangi efisiensi penggunaan memori dan performa.
Tantangan
MudahBuat program C yang menunjukkan cara meneruskan struct ke fungsi berdasarkan nilai. Programmu harus:
- Mendefinisikan
structbernamaRectangledengan anggota berikut:- Bilangan bulat
widthuntuk menyimpan lebar persegi panjang - Bilangan bulat
heightuntuk menyimpan tinggi persegi panjang - Array karakter
colorberukuran 15 untuk menyimpan warna persegi panjang
- Bilangan bulat
- Menulis fungsi bernama
displayRectangleyang:- Menerima struct
Rectanglesebagai parameter (diteruskan berdasarkan nilai) - Mencetak informasi persegi panjang dengan format persis berikut:
Rectangle Details:Width: [width]Height: [height]Color: [color]Area: [area]
- Menghitung dan mencetak luasnya (lebar × tinggi)
- Menerima struct
- Menulis fungsi bernama
modifyRectangleyang:- Menerima struct
Rectanglesebagai parameter (diteruskan berdasarkan nilai) - Menggandakan lebar dan tinggi persegi panjang
- Mengubah warnanya menjadi "Modified"
- Mencetak
Inside modifyRectangle function: - Memanggil
displayRectangleuntuk menampilkan persegi panjang yang telah dimodifikasi
- Menerima struct
- Di fungsi main:
- Membuat variabel
Rectanglebernamarect - Membaca lebar, tinggi, dan warna dari input, lalu menetapkannya ke anggota struct
- Mencetak
Original rectangle: - Memanggil
displayRectangleuntuk menampilkan persegi panjang asli - Memanggil
modifyRectangledengan persegi panjang tersebut - Mencetak
After modifyRectangle call: - Memanggil
displayRectanglelagi untuk menunjukkan bahwa persegi panjang asli tidak berubah
- Membuat variabel
Tantangan ini menunjukkan konsep penting meneruskan struct berdasarkan nilai: saat kamu meneruskan struct ke fungsi, fungsi menerima salinan lengkap struct tersebut. Setiap perubahan yang dilakukan di dalam fungsi hanya memengaruhi salinan, bukan struct asli dalam fungsi pemanggil.
Coba sendiri
#include <stdio.h>
#include <string.h>
// TODO: Definisikan struct Rectangle di sini
// TODO: Tulis fungsi displayRectangle di sini
// TODO: Tulis fungsi modifyRectangle di sini
int main() {
// Baca input
int width, height;
char color[15];
scanf("%d", &width);
scanf("%d", &height);
scanf("%s", color);
// TODO: Buat variabel Rectangle dan isi dengan nilai input
// TODO: Cetak "Original rectangle:" dan panggil displayRectangle
// TODO: Panggil modifyRectangle
// TODO: Cetak "After modifyRectangle call:" dan panggil displayRectangle lagi
return 0;
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Dasar-Dasar Pointer
Apa Itu Pointer?Mendeklarasikan PointerOperator Address-Of (&)Operator Dereference (*)Pointer NULLRekap: Dasar-Dasar Pointer4Proyek: Utilitas Teks Sederhana
Gambaran Umum ProyekMenghitung Karakter2Pointer dan array
Nama array sebagai pointerElemen array dan pointerAritmetika pointerMembandingkan pointerRangkuman: Menelusuri array dengan pointer5Pointer dan Fungsi
Penerusan dengan NilaiMeneruskan Pointer ke FungsiMengubah Variabel melalui PointerContoh Klasik: SwapMeneruskan Array ke FungsiRingkasan: Argumen Pointer Fungsi8Struct dan Pointer
Pointer ke StructOperator Panah (->)Mengirim Struct berdasarkan NilaiMengirim Pointer StructAlokasi Dinamis StructUlasan: Memodifikasi Struct dengan Pointer11Tantangan Rangkuman Akhir
Rangkuman: Penggabungan string DinamisRangkuman: array berisi structRangkuman: Penghitung Frekuensi Kata3Array char dan String
String sebagai array charPenanda akhir nullInput String dengan scanfMenggunakan strlen()Menggunakan strcpy()Menggunakan strcat()Menggunakan strcmp()Ulasan: Fungsi String DasarLatihan sendiri: Compiler C online