Dalam C++, pointer mengacu pada variabel yang menyimpan alamat variabel lain. Seperti variabel biasa, pointer memiliki tipe data. Misalnya, pointer bertipe integer dapat menyimpan alamat variabel bertipe integer. Pointer tipe karakter dapat menyimpan alamat variabel tipe karakter.
Anda akan melihat pointer sebagai representasi simbolis dari alamat memori. Dengan pointer, program dapat mensimulasikan call-by-reference. Mereka juga dapat membuat dan memanipulasi struktur data dinamis. Dalam C++, variabel pointer mengacu pada variabel yang menunjuk ke alamat tertentu dalam memori yang ditunjuk oleh variabel lain.
Dalam tutorial C++ ini, Anda akan belajar:
Apa itu Pointer?
Alamat dalam C++
Sintaks Deklarasi Pointer
Operator Referensi (&) dan Operator Deferensi (*)
Penunjuk dan Array
Penunjuk NULL
Penunjuk Variabel
Aplikasi Pointer
Keuntungan menggunakan Pointer
Alamat dalam C++
Untuk memahami pointer C++, Anda harus memahami bagaimana komputer menyimpan data.
Saat Anda membuat variabel dalam program C++, variabel tersebut diberi beberapa ruang di memori komputer. Nilai variabel ini disimpan di lokasi yang ditetapkan.
Untuk mengetahui lokasi di memori komputer tempat data disimpan, C++ menyediakan & (referensi) operator. Operator mengembalikan alamat yang ditempati variabel.
Misalnya, jika x adalah variabel, &x mengembalikan alamat variabel.
Sintaks Deklarasi Pointer
Deklarasi C++ menggunakan sintaks berikut:
datatype *variable_name;
Tipe data adalah tipe dasar dari pointer yang harus merupakan tipe data C++ yang valid.
Variabel_name adalah nama dari variabel penunjuk.
Asterisk yang digunakan di atas untuk deklarasi pointer mirip dengan asterisk yang digunakan untuk melakukan operasi perkalian. Ini adalah tanda bintang yang menandai variabel sebagai pointer.
Berikut adalah contoh deklarasi pointer yang valid di C++:
int *x; // a pointer to integer
double *x; // a pointer to double
float *x; // a pointer to float
char *ch // a pointer to a character
Operator dereference (*) membantu kita mendapatkan nilai yang telah disimpan dalam alamat memori.
Misalnya:
Jika kita memiliki variabel yang diberi nama num, disimpan di alamat 0x234 dan menyimpan nilainya 28.
Operator referensi (&) akan mengembalikan 0x234.
Operator dereference (*) akan mengembalikan 5.
Contoh 1:
#include <iostream>
using namespace std;
int main() {
int x = 27;
int *ip;
ip = &x;
cout << "Value of x is : ";
cout << x << endl;
cout << "Value of ip is : ";
cout << ip<< endl;
cout << "Value of *ip is : ";
cout << *ip << endl;
return 0;
}
Keluaran:
Cara kerjanya:
Berikut adalah screenshot kodenya:
Penjelasan Kode:
Impor file header iostream. Ini akan memungkinkan kita untuk menggunakan fungsi yang didefinisikan dalam file header tanpa mendapatkan kesalahan.
Sertakan namespace std untuk menggunakan kelasnya tanpa memanggilnya.
Panggil fungsi main(). Logika program harus ditambahkan di dalam isi fungsi ini. { menandai awal dari tubuh fungsi.
Deklarasikan variabel integer x dan beri nilai 27.
Deklarasikan variabel pointer *ip.
Simpan alamat variabel x dalam variabel pointer.
Cetak beberapa teks di konsol.
Cetak nilai variabel x pada layar.
Cetak beberapa teks di konsol.
Cetak alamat variabel x. Nilai alamat disimpan dalam variabel ip.
Cetak beberapa teks di konsol.
Cetak nilai yang disimpan pada alamat pointer.
Program harus mengembalikan nilai setelah eksekusi berhasil.
Akhir dari isi fungsi main().
Pointer dan Array
Array dan pointer bekerja berdasarkan konsep terkait. Ada beberapa hal berbeda yang perlu diperhatikan saat bekerja dengan array yang memiliki pointer. Nama array itu sendiri menunjukkan alamat dasar array. Ini berarti bahwa untuk menetapkan alamat array ke pointer, Anda tidak boleh menggunakan ampersand (&).
Misalnya:
p = arr;
Di atas benar karena arr mewakili alamat array. Ini contoh lain:
p = &arr;
Hal di atas salah.
Kita dapat secara implisit mengubah array menjadi pointer. Misalnya:
int arr [20];
int * ip;
Di bawah ini adalah operasi yang valid:
ip = arr;
Setelah deklarasi di atas, ip dan arr akan setara, dan mereka akan berbagi properti. Namun, alamat yang berbeda dapat diberikan ke ip, tetapi kami tidak dapat menetapkan apa pun ke arr.
Contoh 2:
Contoh ini menunjukkan cara melintasi array menggunakan pointer:
#include <iostream>
using namespace std;
int main() {
int *ip;
int arr[] = { 10, 34, 13, 76, 5, 46 };
ip = arr;
for (int x = 0; x < 6; x++) {
cout << *ip << endl;
ip++;
}
return 0;
}
Keluaran:
Berikut adalah screenshot kodenya:
Penjelasan Kode:
Deklarasikan variabel pointer integer ip.
Deklarasikan array bernama arr dan simpan 6 bilangan bulat ke dalamnya.
Tetapkan arr ke ip. Ip dan arr akan menjadi setara.
Buat perulangan for. Variabel loop x dibuat untuk mengulangi elemen array dari indeks 0 hingga 5.
Cetak nilai yang disimpan di alamat IP pointer. Satu nilai akan dikembalikan per iterasi, dan total 6 pengulangan akan dilakukan. Endl adalah kata kunci C++ yang berarti garis akhir. Tindakan ini memungkinkan Anda untuk memindahkan kursor ke baris berikutnya setelah setiap nilai dicetak. Setiap nilai akan dicetak dalam baris individual.
Untuk memindahkan pointer ke posisi int berikutnya setelah setiap iterasi.
Akhir dari perulangan for.
Program harus mengembalikan sesuatu setelah eksekusi berhasil.
Akhir dari badan fungsi main().
Penunjuk NULL
Jika tidak ada alamat pasti yang akan ditetapkan, maka variabel pointer dapat diberi NULL. Itu harus dilakukan selama deklarasi. Pointer seperti itu dikenal sebagai pointer nol. Nilainya nol dan didefinisikan di banyak perpustakaan standar seperti iostream.
Contoh 3:
#include <iostream>
using namespace std;
int main() {
int *ip = NULL;
cout << "Value of ip is: " << ip;
return 0;
}
Keluaran:
Berikut adalah screenshot kodenya:
Penjelasan Kode:
Deklarasikan ip variabel pointer dan berikan nilai NULL.
Cetak nilai ip variabel pointer di samping beberapa teks di konsol.
Program harus mengembalikan nilai setelah berhasil diselesaikan.
Akhir dari isi fungsi main().
Penunjuk Variabel
Dengan C++, Anda dapat memanipulasi data langsung dari memori komputer.
Ruang memori dapat ditetapkan atau ditetapkan kembali sesuai keinginan. Ini dimungkinkan oleh variabel Pointer.
Variabel pointer menunjuk ke alamat tertentu di memori komputer yang ditunjuk oleh variabel lain.
Dapat dideklarasikan sebagai berikut:
int *p;
Atau,
int* p;
Dalam contoh Anda, kami telah mendeklarasikan variabel pointer p.
Ini akan menyimpan alamat memori.
Tanda bintang adalah operator dereference yang berarti penunjuk ke.
Pointer p menunjuk ke nilai integer di alamat memori.
Contoh 4:
#include <iostream>
using namespace std;
int main() {
int *p, x = 30;
p = &x;
cout << "Value of x is: " << *p;
return 0;
}
Keluaran:
Berikut adalah screenshot kodenya:
Penjelasan Kode:
Deklarasikan variabel pointer p dan variabel x dengan nilai 30.
Menetapkan alamat variabel x ke p.
Cetak nilai variabel pointer p di samping beberapa teks di konsol.
Program harus mengembalikan nilai setelah berhasil diselesaikan.
Akhir dari isi fungsi main().
Aplikasi Pointer
Fungsi dalam C++ hanya dapat mengembalikan satu nilai. Selanjutnya, semua variabel yang dideklarasikan dalam suatu fungsi dialokasikan pada tumpukan panggilan fungsi. Segera setelah fungsi kembali, semua variabel tumpukan dihancurkan.
Argumen ke fungsi dilewatkan dengan nilai, dan modifikasi apa pun yang dilakukan pada variabel tidak mengubah nilai variabel aktual yang diteruskan. Contoh berikut membantu mengilustrasikan konsep ini:-
Contoh 5:
#include <iostream>
using namespace std;
void test(int*, int*);
int main() {
int a = 5, b = 5;
cout << "Before changing:" << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
test(&a, &b);
cout << "\nAfter changing" << endl;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
return 0;
}
void test(int* n1, int* n2) {
*n1 = 10;
*n2 = 11;
}
Keluaran:
Berikut adalah screenshot kodenya:
Penjelasan Kode:
Buat prototipe fungsi bernama tes yang akan mengambil dua parameter bilangan bulat.
Panggil fungsi main(). Kami akan menambahkan logika program di dalam tubuhnya.
Deklarasikan dua variabel integer a dan b, masing-masing bernilai 5.
Cetak beberapa teks di konsol. Endl (garis akhir) akan menggerakkan kursor untuk mulai mencetak di baris berikutnya.
Cetak nilai variabel a pada konsol bersama teks lainnya. Endl (garis akhir) akan menggerakkan kursor untuk mulai mencetak di baris berikutnya.
Cetak nilai variabel b pada konsol bersama teks lainnya. Endl (garis akhir) akan menggerakkan kursor untuk mulai mencetak di baris berikutnya.
Buat fungsi bernama test() yang mengambil alamat variabel a dan b sebagai parameter.
Cetak beberapa teks di konsol. \n akan membuat baris kosong baru sebelum teks dicetak. Endl (garis akhir) akan menggerakkan kursor untuk mulai mencetak di baris berikutnya setelah teks dicetak.
Cetak nilai variabel a pada konsol bersama teks lainnya. Endl (garis akhir) akan menggerakkan kursor untuk mulai mencetak di baris berikutnya.
Cetak nilai variabel b pada konsol bersama teks lainnya. Endl (garis akhir) akan menggerakkan kursor untuk mulai mencetak di baris berikutnya.
Program harus mengembalikan nilai setelah berhasil diselesaikan.
Akhir dari isi fungsi main().
Mendefinisikan tes fungsi(). Fungsi harus mengambil dua variabel pointer integer *n1 dan *n2.
Menetapkan variabel pointer *n1 dengan nilai 10.
Menetapkan variabel pointer *n2 dengan nilai 11.
Akhir dari isi fungsi test().
Meskipun, nilai-nilai baru ditetapkan ke variabel a dan b di dalam uji fungsi, setelah pemanggilan fungsi selesai, hal yang sama tidak mencerminkan main fungsi luar.
Menggunakan pointer sebagai argumen fungsi membantu meneruskan alamat aktual variabel dalam fungsi, dan semua perubahan yang dilakukan pada variabel akan tercermin dalam fungsi luar.
Dalam kasus di atas, fungsi 'test' memiliki alamat variabel 'a' dan 'b.' Kedua variabel ini dapat diakses langsung dari fungsi 'test', dan karenanya setiap perubahan yang dilakukan pada variabel ini tercermin dalam fungsi pemanggil 'utama.'
Keuntungan menggunakan Pointer
Berikut adalah kelebihan/keuntungan menggunakan Pointer
Penunjuk adalah variabel yang menyimpan alamat variabel lain dalam C++.
Lebih dari satu variabel dapat dimodifikasi dan dikembalikan oleh fungsi menggunakan pointer.
Memori dapat dialokasikan secara dinamis dan tidak dialokasikan menggunakan pointer.
Penunjuk membantu menyederhanakan kerumitan program.
Kecepatan eksekusi program meningkat dengan menggunakan pointer.
Ringkasan:
Sebuah pointer mengacu pada sebuah variabel yang menyimpan alamat dari variabel lain.
Setiap pointer memiliki tipe data yang valid.
Penunjuk adalah representasi simbolis dari alamat memori.
Penunjuk memungkinkan program untuk mensimulasikan panggilan-demi-referensi dan membuat serta memanipulasi struktur data dinamis.
Array dan pointer menggunakan konsep terkait.
Nama array menunjukkan basis array.
Jika Anda ingin menetapkan alamat array ke pointer, jangan gunakan ampersand (&).
Jika tidak ada alamat khusus untuk menetapkan variabel pointer, tetapkan NULL.