Contoh Klasik: Swap
Termasuk bagian Logika dan Alur dalam perjalanan C di Coddy. Pelajaran 28 dari 63.
Fungsi swap adalah salah satu contoh paling terkenal yang menunjukkan alasan pointer sangat penting dalam pemrograman C. Tujuannya sederhana: tulis fungsi yang menukar nilai dua variabel. Namun, tugas yang tampaknya mudah ini mengungkap keterbatasan mendasar dari pengiriman argumen berdasarkan nilai.
Perhatikan apa yang terjadi jika kamu mencoba menukar dua variabel dengan mekanisme pengiriman berdasarkan nilai yang biasa:
void badSwap(int a, int b) {
int temp = a;
a = b;
b = temp;
// Ini hanya menukar salinannya, bukan variabel aslinya!
}Pendekatan ini gagal karena fungsi hanya menerima salinan nilai. Variabel asli dalam fungsi pemanggil tetap tidak berubah.
Solusinya memerlukan pointer ke variabel sebagai gantinya:
void swap(int *a, int *b) {
int temp = *a; // Simpan nilai di alamat a
*a = *b; // Masukkan nilai dari alamat b ke alamat a
*b = temp; // Masukkan nilai yang disimpan ke alamat b
}Dengan meneruskan alamat variabel dan menggunakan operator dereferensi, fungsi dapat langsung mengubah nilai variabel asli. Ini menjadikan fungsi swap sebagai contoh yang tepat untuk menunjukkan kapan dan mengapa kamu memerlukan pointer untuk melakukan tugas yang tidak dapat ditangani hanya dengan meneruskan nilai.
Tantangan
MudahTulis program C yang mengimplementasikan dan mendemonstrasikan fungsi swap klasik menggunakan pointer. Programmu harus:
- Membuat fungsi bernama
swapyang menerima dua pointer ke integer sebagai parameter - Di dalam fungsi
swap, menukar nilai pada alamat memori yang ditunjuk oleh kedua pointer menggunakan variabel sementara - Di dalam fungsi
main, membaca dua integer dari input pengguna - Mencetak nilai awal dengan format:
Before swap: a = [value], b = [value] - Memanggil fungsi
swapdan meneruskan alamat kedua variabel menggunakan operator alamat - Setelah pemanggilan fungsi, mencetak nilai yang sudah ditukar dengan format:
After swap: a = [value], b = [value]
Output-mu harus menunjukkan bahwa fungsi berhasil menukar nilai variabel asli:
Before swap: a = [first_input], b = [second_input]
After swap: a = [second_input], b = [first_input]Tantangan ini menunjukkan alasan pointer penting untuk operasi penukaran, yaitu fungsi harus mengakses lokasi memori variabel asli untuk menukar nilainya secara permanen. Hal ini tidak mungkin dilakukan dengan pass-by-value.
Coba sendiri
#include <stdio.h>
// TODO: Tulis fungsi swap-mu di sini
int main() {
int a, b;
// Baca input
scanf("%d", &a);
scanf("%d", &b);
// Cetak nilai awal
printf("Before swap: a = %d, b = %d\n", a, b);
// TODO: Panggil fungsi swap-mu di sini
// Cetak nilai setelah ditukar
printf("After swap: a = %d, b = %d\n", a, b);
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