Apa itu Pointer?
Di C ++, pointer merujuk ke variabel yang menyimpan alamat variabel lain. Seperti variabel biasa, pointer memiliki tipe data. Misalnya, pointer tipe integer dapat menampung alamat variabel tipe integer. Penunjuk tipe karakter dapat menampung alamat variabel tipe karakter.
Anda harus melihat pointer sebagai representasi simbolis dari alamat memori. Dengan pointer, program dapat mensimulasikan panggilan demi referensi. Mereka juga dapat membuat dan memanipulasi struktur data dinamis. Di C ++, variabel pointer mengacu pada variabel yang menunjuk ke alamat tertentu dalam memori yang ditunjukkan oleh variabel lain.
Dalam tutorial C ++ ini, Anda akan mempelajari:
- Apa itu Pointer?
- Alamat di C ++
- Sintaks Deklarasi Pointer
- Operator referensi (&) dan operator Deferensi (*)
- Pointer dan Array
- Pointer NULL
- Pointer Variabel
- Penerapan Pointer
- Keuntungan menggunakan Pointer
Alamat di C ++
Untuk memahami petunjuk C ++, Anda harus memahami bagaimana komputer menyimpan data.
Ketika Anda membuat variabel dalam program C ++ Anda, itu diberikan beberapa ruang memori komputer. Nilai variabel ini disimpan di lokasi yang ditetapkan.
Untuk mengetahui lokasi penyimpanan data di memori komputer, C ++ menyediakan operator & (referensi). 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 penunjuk yang harus merupakan tipe data C ++ yang valid.
- Variabel_name adalah nama variabel pointer.
- Tanda bintang yang digunakan di atas untuk deklarasi penunjuk mirip dengan tanda bintang yang digunakan untuk melakukan operasi perkalian. Ini adalah tanda bintang yang menandai variabel sebagai penunjuk.
Berikut adalah contoh deklarasi pointer yang valid di C ++:
int *x; // a pointer to integerdouble *x; // a pointer to doublefloat *x; // a pointer to floatchar *ch // a pointer to a character
Operator referensi (&) dan operator Deferensi (*)
Operator referensi (&) mengembalikan alamat variabel.
Operator dereferensi (*) membantu kita mendapatkan nilai yang telah disimpan di alamat memori.
Sebagai contoh:
Jika kita memiliki variabel yang diberi nama num, disimpan di alamat 0x234 dan menyimpan nilai 28.
Operator referensi (&) akan mengembalikan 0x234.
Operator dereferensi (*) akan mengembalikan 5.
Contoh 1:
#includeusing 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:
Bagaimana ini bekerja:
Berikut tangkapan layar kodenya:
Penjelasan Kode:
- Impor file header iostream. Ini akan memungkinkan kita untuk menggunakan fungsi yang ditentukan dalam file header tanpa kesalahan.
- Sertakan namespace std untuk menggunakan kelasnya tanpa memanggilnya.
- Panggil fungsi main (). Logika program harus ditambahkan di dalam tubuh fungsi ini. Tanda {menandai awal dari badan fungsi.
- Deklarasikan variabel integer x dan berikan nilai 27.
- Deklarasikan variabel penunjuk * ip.
- Simpan alamat variabel x di variabel penunjuk.
- Cetak beberapa teks di konsol.
- Cetak nilai variabel x di layar.
- Cetak beberapa teks di konsol.
- Cetak alamat variabel x. Nilai alamat disimpan di variabel ip.
- Cetak beberapa teks di konsol.
- Nilai cetak disimpan di alamat penunjuk.
- Program harus mengembalikan nilai setelah eksekusi berhasil.
- Akhir badan 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 dari array tersebut. Ini berarti bahwa untuk menetapkan alamat array ke pointer, Anda tidak boleh menggunakan simbol ampersand (&).
Sebagai contoh:
p = arr;
Di atas benar karena arr mewakili alamat array. Berikut contoh lainnya:
p = &arr;
Di atas salah.
Kami secara implisit dapat mengubah sebuah array menjadi sebuah pointer. Sebagai contoh:
int arr [20];int * ip;
Di bawah ini adalah operasi yang valid:
ip = arr;
Setelah deklarasi di atas, ip dan arr akan menjadi setara, dan mereka akan berbagi properti. Namun, alamat yang berbeda dapat diberikan ke ip, tetapi kita tidak dapat menetapkan apapun ke arr.
Contoh 2:
Contoh ini menunjukkan cara melintasi larik menggunakan pointer:
#includeusing 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 tangkapan layar kodenya:
Penjelasan Kode:
- Deklarasikan ip variabel penunjuk integer.
- Deklarasikan sebuah array bernama arr dan simpan 6 integer ke dalamnya.
- Tetapkan arr ke ip. Ip dan arr akan menjadi setara.
- Buat loop untuk. Variabel loop x dibuat untuk mengulang elemen array dari indeks 0 hingga 5.
- Cetak nilai yang disimpan di alamat IP penunjuk. 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 satu baris.
- Untuk memindahkan penunjuk ke posisi int berikutnya setelah setiap iterasi.
- Akhir dari untuk satu loop.
- Program harus mengembalikan sesuatu setelah eksekusi berhasil.
- Akhir badan fungsi main ().
Pointer NULL
Jika tidak ada alamat pasti yang akan ditetapkan, maka variabel penunjuk dapat diberi NULL. Itu harus dilakukan selama deklarasi. Penunjuk seperti itu dikenal sebagai penunjuk nol. Nilainya nol dan ditentukan di banyak pustaka standar seperti iostream.
Contoh 3:
#includeusing namespace std;int main() {int *ip = NULL;cout << "Value of ip is: " << ip;return 0;}
Keluaran:
Berikut tangkapan layar kodenya:
Penjelasan Kode:
- Deklarasikan ip variabel pointer dan tetapkan nilai NULL.
- Nilai cetak dari variabel penunjuk ip bersama beberapa teks di konsol.
- Program harus mengembalikan nilai setelah berhasil diselesaikan.
- Akhir badan fungsi main ().
Pointer 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 penunjuk menunjuk ke alamat tertentu di memori komputer yang ditunjukkan oleh variabel lain.
Itu 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 dereferensi yang berarti penunjuk ke.
Pointer p menunjuk ke nilai integer di alamat memori.
Contoh 4:
#includeusing namespace std;int main() {int *p, x = 30;p = &x;cout << "Value of x is: " << *p;return 0;}
Keluaran:
Berikut tangkapan layar kodenya:
Penjelasan Kode:
- Deklarasikan variabel penunjuk p dan variabel x dengan nilai 30.
- Tetapkan alamat variabel x ke p.
- Cetak nilai variabel penunjuk p di samping beberapa teks di konsol.
- Program harus mengembalikan nilai setelah berhasil diselesaikan.
- Akhir badan fungsi main ().
Penerapan Pointer
Fungsi di C ++ hanya dapat mengembalikan satu nilai. Selanjutnya, semua variabel yang dideklarasikan dalam suatu fungsi dialokasikan pada stack panggilan fungsi. Segera setelah fungsi tersebut kembali, semua variabel tumpukan dimusnahkan.
Argumen ke fungsi diteruskan oleh nilai, dan modifikasi apa pun yang dilakukan pada variabel tidak mengubah nilai variabel aktual yang diteruskan. Contoh berikut membantu menggambarkan konsep ini: -
Contoh 5:
#includeusing 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 tangkapan layar kodenya:
Penjelasan Kode:
- Buat prototipe dari fungsi bernama test yang akan mengambil dua parameter integer.
- Panggil fungsi main (). Kami akan menambahkan logika program di dalam tubuhnya.
- Deklarasikan dua variabel bilangan bulat a dan b, masing-masing dengan nilai 5.
- Cetak beberapa teks di konsol. Endl (garis akhir) akan menggerakkan kursor untuk mulai mencetak di baris berikutnya.
- Cetak nilai variabel a di konsol bersama teks lainnya. Endl (garis akhir) akan menggerakkan kursor untuk mulai mencetak di baris berikutnya.
- Cetak nilai variabel b di konsol bersama teks lainnya. Endl (garis akhir) akan menggerakkan kursor untuk mulai mencetak di baris berikutnya.
- Buat fungsi bernama test () yang menggunakan 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 di konsol bersama teks lainnya. Endl (garis akhir) akan menggerakkan kursor untuk mulai mencetak di baris berikutnya.
- Cetak nilai variabel b di konsol bersama teks lainnya. Endl (garis akhir) akan menggerakkan kursor untuk mulai mencetak di baris berikutnya.
- Program harus mengembalikan nilai setelah berhasil diselesaikan.
- Akhir badan fungsi main ().
- Mendefinisikan uji fungsi (). Fungsi tersebut harus mengambil dua variabel penunjuk bilangan bulat * n1 dan * n2.
- Menetapkan variabel penunjuk * n1 nilai 10.
- Menetapkan nilai variabel penunjuk * n2 11.
- Akhir badan pengujian fungsi ().
Meskipun, nilai baru diberikan ke variabel a dan b di dalam uji fungsi, setelah pemanggilan fungsi selesai, hal yang sama tidak tercermin pada fungsi luar utama.
Menggunakan pointer sebagai argumen fungsi membantu melewatkan alamat variabel sebenarnya dalam fungsi, dan semua perubahan yang dilakukan pada variabel akan tercermin di fungsi luar.
Dalam kasus di atas, fungsi 'test' memiliki alamat variabel 'a' dan 'b.' Kedua variabel ini dapat langsung diakses dari fungsi 'test', dan karenanya setiap perubahan yang dilakukan pada variabel ini tercermin dalam fungsi pemanggil 'main'.
Keuntungan menggunakan Pointer
Di sini, keuntungan / keuntungan menggunakan Pointer
- Pointer adalah variabel yang menyimpan alamat variabel lain di C ++.
- Lebih dari satu variabel dapat dimodifikasi dan dikembalikan oleh fungsi menggunakan pointer.
- Memori dapat dialokasikan dan dialokasikan secara dinamis menggunakan pointer.
- Pointer membantu menyederhanakan kompleksitas program.
- Kecepatan eksekusi program meningkat dengan menggunakan pointer.
Ringkasan:
- Sebuah pointer merujuk ke alamat variabel yang memegang variabel lain.
- Setiap penunjuk memiliki tipe data yang valid.
- Pointer adalah representasi simbolis dari alamat memori.
- Pointer 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 penunjuk, tetapkan NULL.