Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Tulis program C yang mengimplementasikan dan mendemonstrasikan fungsi swap klasik menggunakan pointer. Programmu harus:

  1. Membuat fungsi bernama swap yang menerima dua pointer ke integer sebagai parameter
  2. Di dalam fungsi swap, menukar nilai pada alamat memori yang ditunjuk oleh kedua pointer menggunakan variabel sementara
  3. Di dalam fungsi main, membaca dua integer dari input pengguna
  4. Mencetak nilai awal dengan format: Before swap: a = [value], b = [value]
  5. Memanggil fungsi swap dan meneruskan alamat kedua variabel menggunakan operator alamat
  6. 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;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler C online