Menguasai Pointer C++: Konsep, Contoh, dan Aplikasi Praktis
Apa Itu Pointer?
Pointer dalam C++ adalah variabel yang menyimpan alamat memori dari variabel lain. Tipe pointer harus cocok dengan tipe data yang ditunjuknya. Misalnya, int* hanya dapat menampung alamat objek int.
Pointer memungkinkan program untuk memanipulasi data secara langsung dalam memori, memungkini struktur data yang efisien, alokasi dinamis, dan semantik panggilan-by-reference.
Memahami Alamat Memori
Setiap variabel dialokasikan di lokasi unik dalam RAM. Operator referensi & mengambil alamat tersebut. Untuk variabel x, &x menghasilkan lokasi memori-nya.
Sintaks Deklarasi Pointer
Deklarasi mengikuti pola:
datatype *pointer_name;
- datatype – tipe dasar data yang dirujuk oleh pointer.
- pointer_name – pengidentifikasi untuk variabel pointer.
- Asterisk menunjukkan bahwa variabel adalah pointer.
Contoh:
int *p; // pointer to int double *d; // pointer to double char *c; // pointer to char
Referensi (&) vs. Dereferensi (*)
Operator & memberikan alamat variabel; operator * mengambil nilai yang disimpan di alamat tersebut.
#include <iostream> using namespace std; int main() { int x = 27; int *ip = &x; cout << "Value of x: " << x << endl; cout << "Address of x: " << ip << endl; cout << "Value via pointer: " << *ip << endl; return 0; } Output:
Value of x: 27 Address of x: 0x7ffeefbff5ac Value via pointer: 27
Pointer dan Array
Nama array merusak menjadi pointer ke elemen pertamanya. Oleh karena itu:
int arr[5]; int *p = arr; // correct int *q = &arr; // incorrect – &arr yields address of the entire array, not its first element
Menggunakan pointer untuk mengiterasi array:
#include <iostream> using namespace std; int main() { int *p; int arr[] = {10, 34, 13, 76, 5, 46}; p = arr; for (int i = 0; i < 6; ++i) { cout << *p++ << endl; } return 0; } Output:
10 34 13 76 5 46
Pointer Null
Ketika pointer tidak memiliki target yang valid, ia harus diinisialisasi ke NULL (atau nullptr dalam C++11 dan lebih baru). Ini mencegah dereferensi yang tidak disengaja.
#include <iostream> using namespace std; int main() { int *ip = nullptr; cout << "ip = " << ip << endl; // prints 0 return 0; } Menggunakan Pointer dalam Fungsi
Mengirim pointer ke fungsi memungkinkan fungsi untuk mengubah variabel asli. Teknik ini mengimplementasikan call-by-reference.
#include <iostream> using namespace std; void modify(int *p1, int *p2) { *p1 = 10; *p2 = 11; } int main() { int a = 5, b = 5; cout << "Before: a=" << a << ", b=" << b << endl; modify(&a, &b); cout << "After: a=" << a << ", b=" << b << endl; return 0; } Output:
Before: a=5, b=5 After: a=10, b=11
Manfaat Pointer
- Akses memori langsung untuk kode berkinerja tinggi.
- Kemampuan untuk mengubah beberapa variabel melalui satu pemanggilan fungsi.
- Alokasi dan pengalokasian ulang memori dinamis (misalnya,
new / delete). Darah untuk struktur data kompleks seperti linked list, pohon, dan graf. | - Memfasilitasi berbagi sumber daya yang efisien dan polimorfisme dalam desain berorientasi objek.
Ringkasan Cepat
- Pointer menyimpan alamat variabel lain.
- Gunakan
& untuk mendapatkan alamat; gunakan * untuk dereferensi. - Nama array merusak menjadi pointer ke elemen pertamanya.
- Inisialisasi pointer yang tidak digunakan ke
nullptr. - Kirim pointer ke fungsi untuk modifikasi in-place.
- Pointer memungkinkan manajemen memori dinamis dan struktur data yang efisien.