Menu
CoddyTech

Pointer dan Reference

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 13 dari 104.

Setelah memahami memori stack dan heap, mari pelajari alat yang memungkinkan kamu bekerja langsung dengan lokasi memori: pointer dan reference.

Pointer menyimpan alamat memori dari variabel lain. Kamu mendeklarasikannya dengan * dan mendapatkan alamat menggunakan &.

int value = 42;
int* ptr = &value;    // ptr menyimpan alamat memori value

std::cout << ptr;     // Menampilkan alamat memori
std::cout << *ptr;    // Dereferensi: menampilkan 42

Reference adalah alias untuk variabel yang sudah ada. Setelah terikat, reference selalu merujuk ke variabel tersebut. Kamu mendeklarasikannya dengan &.

int value = 42;
int& ref = value;     // ref adalah alias untuk value

ref = 100;            // Mengubah value menjadi 100
std::cout << value;   // Menampilkan 100

Perbedaan utama:

PointerReference
Bisa bernilai nullHarus diinisialisasi
Bisa ditetapkan ulangTidak bisa diikat ulang
Gunakan * untuk mengakses nilaiAkses nilai secara langsung
Bisa menunjuk ke apa punSelalu valid

Keduanya penting agar kamu dapat mengirimkan object ke fungsi secara efisien tanpa menyalinnya, serta bekerja dengan memori yang dialokasikan di heap. Reference lebih aman dan sederhana, sedangkan pointer menawarkan lebih banyak fleksibilitas saat kamu perlu menetapkan ulang atau memeriksa apakah nilainya null.

challenge icon

Tantangan

Mudah

Mari buat sistem manipulasi nilai sederhana yang menunjukkan perbedaan cara kerja pointer dan reference saat memodifikasi data.

Kamu akan membuat dua file untuk mengatur kodemu:

  • ValueOps.h: Definisikan tiga fungsi yang memodifikasi nilai integer dengan cara berbeda:
    • doubleByPointer(int* ptr): menerima pointer dan menggandakan nilai yang ditunjuknya
    • tripleByReference(int& ref): menerima reference dan melipatgandakan nilai sebanyak tiga kali
    • swapValues(int* a, int* b): menerima dua pointer dan menukar nilai yang ditunjuknya
  • main.cpp: Baca dua integer dari input, lalu tunjukkan cara kerja pointer dan reference:
    • Cetak nilai awal: "Original: <first> <second>"
    • Gunakan doubleByPointer pada nilai pertama, lalu cetak: "After double: <first>"
    • Gunakan tripleByReference pada nilai kedua, lalu cetak: "After triple: <second>"
    • Gunakan swapValues untuk menukar kedua nilai, lalu cetak: "After swap: <first> <second>"

Saat memanggil fungsi dengan pointer, ingat untuk menggunakan operator address-of (&) untuk meneruskan alamat variabel. Reference bekerja lebih alami, cukup teruskan variabel secara langsung.

Sertakan file header-mu di main.cpp menggunakan #include "ValueOps.h".

Coba sendiri

#include <iostream>
#include "ValueOps.h"
using namespace std;

int main() {
    // Baca dua bilangan bulat dari input
    int first, second;
    cin >> first;
    cin >> second;
    
    // Cetak nilai awal
    cout << "Original: " << first << " " << second << endl;
    
    // TODO: Gunakan doubleByPointer pada nilai pertama (teruskan alamat menggunakan &)
    
    // TODO: Cetak nilai setelah digandakan
    
    // TODO: Gunakan tripleByReference pada nilai kedua (teruskan variabel secara langsung)
    
    // TODO: Cetak nilai setelah dilipatgandakan tiga kali
    
    // TODO: Gunakan swapValues untuk menukar kedua nilai (teruskan alamat menggunakan &)
    
    // TODO: Cetak nilai setelah ditukar
    
    return 0;
}
quiz iconUji dirimu

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

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler C++ online