C++ Petunjuk dengan Contoh

Apa itu Pointer?

In C++, pointer merujuk ke variabel yang menyimpan alamat variabel lain. Seperti variabel biasa, pointer memiliki tipe data. Misalnya, pointer bertipe integer dapat menampung alamat variabel bertipe integer. Pointer bertipe karakter dapat menampung alamat variabel bertipe karakter.

Anda akan 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 dalam C++, variabel penunjuk mengacu pada variabel yang menunjuk ke alamat tertentu dalam memori yang ditunjuk oleh variabel lain.

Alamat di C++

Untuk mengerti C++ petunjuknya, Anda harus memahami bagaimana komputer menyimpan data.

Saat Anda membuat variabel di C++ program, itu diberikan sejumlah ruang pada 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 tersebut.

Sintaks Deklarasi Pointer

Deklarasi dari C++ mengambil sintaks berikut:

datatype *variable_name; 
  • Tipe data adalah tipe dasar pointer yang harus valid C++ tipe data.
  • Nama_variabel harus berupa nama variabel penunjuk.
  • Asterisk yang digunakan di atas untuk deklarasi pointer sama dengan asterisk 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 integer
double *x;    // a pointer to double
float  *x;    // a pointer to float
char   *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 mempunyai 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:

#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:

Operator Referensi (&) dan Operator Deferensi (*)

Bagaimana ini bekerja:

Operator Referensi (&) dan Operator Deferensi (*)

Berikut ini tangkapan layar kodenya:

Operator Referensi (&) dan Operator Deferensi (*)

Penjelasan Kode:

  1. Impor file header iostream. Ini akan memungkinkan kita untuk menggunakan fungsi yang ditentukan dalam file header tanpa mendapatkan kesalahan.
  2. Sertakan namespace std untuk menggunakan kelasnya tanpa memanggilnya.
  3. Panggil fungsi main(). Logika program harus ditambahkan dalam isi fungsi ini. Tanda { menandai awal isi fungsi.
  4. Deklarasikan variabel integer x dan berikan nilai 27.
  5. Deklarasikan variabel penunjuk *ip.
  6. Simpan alamat variabel x dalam variabel pointer.
  7. Cetak beberapa teks di konsol.
  8. Cetak nilai variabel x di layar.
  9. Cetak beberapa teks di konsol.
  10. Cetak alamat variabel x. Nilai alamat disimpan dalam variabel ip.
  11. Cetak beberapa teks di konsol.
  12. Nilai cetak disimpan di alamat penunjuk.
  13. Program harus mengembalikan nilai setelah eksekusi berhasil.
  14. Akhir dari isi fungsi main().

Pointer dan Array

Array dan pointer bekerja berdasarkan konsep terkait. Ada beberapa hal berbeda yang perlu diperhatikan ketika bekerja dengan array yang memiliki pointer. Nama array itu sendiri menunjukkan alamat dasar array. Artinya, untuk menetapkan alamat array ke pointer, Anda tidak boleh menggunakan tanda ampersand (&).

Sebagai contoh:

p = arr;

Pernyataan di atas benar karena arr mewakili alamat array. Berikut ini contoh lainnya:

p = &arr;

Hal di atas tidak benar.

Kita secara implisit dapat 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 keduanya 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:

Pointer dan Array

Berikut ini tangkapan layar kodenya:

Pointer dan Array

Penjelasan Kode:

  1. Deklarasikan ip variabel penunjuk bilangan bulat.
  2. Deklarasikan array bernama arr dan simpan 6 bilangan bulat ke dalamnya.
  3. Tetapkan arr ke ip. Ip dan arr akan menjadi setara.
  4. Buat perulangan for. Variabel loop x dibuat untuk mengulangi elemen array dari indeks 0 hingga 5.
  5. Cetak nilai yang disimpan di alamat IP penunjuk. Satu nilai akan dikembalikan per iterasi, dan total 6 pengulangan akan dilakukan. Ujungnya adalah a C++ kata kunci yang berarti garis akhir. Tindakan ini memungkinkan Anda memindahkan kursor ke baris berikutnya setelah setiap nilai dicetak. Setiap nilai akan dicetak dalam satu baris.
  6. Untuk memindahkan penunjuk ke posisi int berikutnya setelah setiap iterasi.
  7. Akhir dari perulangan for.
  8. Program harus mengembalikan sesuatu setelah eksekusi berhasil.
  9. Akhir dari isi fungsi main().

penunjuk nol

Jika tidak ada alamat pasti yang akan diberikan, maka variabel penunjuk dapat diberi NULL. Hal ini harus dilakukan pada saat deklarasi. Penunjuk seperti itu dikenal sebagai penunjuk nol. Nilainya nol dan ditentukan 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:

penunjuk nol

Berikut ini tangkapan layar kodenya:

penunjuk nol

Penjelasan Kode:

  1. Deklarasikan variabel penunjuk ip dan berikan nilai NULL.
  2. Cetak nilai variabel penunjuk ip di samping beberapa teks di konsol.
  3. Program harus mengembalikan nilai setelah berhasil diselesaikan.
  4. Akhir dari isi fungsi main().

Pointer Variabel

Dengan C++, Anda dapat memanipulasi data langsung dari memori komputer.

Ruang memori dapat ditetapkan atau ditetapkan ulang sesuai keinginan. Hal ini dimungkinkan oleh variabel Pointer.

Variabel penunjuk menunjuk ke alamat tertentu di memori komputer yang ditunjuk oleh variabel lain.

Hal ini dapat dinyatakan 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:

#include <iostream>

using namespace std;
int main() {
	int *p, x = 30;
	p = &x;
	cout << "Value of x is: " << *p;
	return 0;
}

Keluaran:

Pointer Variabel

Berikut ini tangkapan layar kodenya:

Pointer Variabel

Penjelasan Kode:

  1. Deklarasikan variabel pointer p dan variabel x dengan nilai 30.
  2. Tetapkan alamat variabel x ke p.
  3. Cetak nilai variabel penunjuk p di samping beberapa teks di konsol.
  4. Program harus mengembalikan nilai setelah berhasil diselesaikan.
  5. Akhir dari isi fungsi main().

Penerapan Pointer

Fungsi dalam C++ hanya dapat mengembalikan satu nilai. Selanjutnya, semua variabel yang dideklarasikan dalam suatu fungsi dialokasikan pada tumpukan pemanggilan fungsi. Segera setelah fungsi kembali, semua variabel tumpukan dimusnahkan.

Argumen untuk fungsi diteruskan berdasarkan 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:

Penerapan Pointer

Berikut ini tangkapan layar kodenya:

Penerapan Pointer

Penjelasan Kode:

  1. Buat prototipe fungsi bernama test yang akan mengambil dua parameter integer.
  2. Panggil fungsi main(). Kami akan menambahkan logika program di dalam tubuhnya.
  3. Deklarasikan dua variabel bilangan bulat a dan b, masing-masing bernilai 5.
  4. Cetak beberapa teks di konsol. Endl (garis akhir) akan menggerakkan kursor untuk mulai mencetak pada baris berikutnya.
  5. Cetak nilai variabel a di konsol bersama teks lainnya. Endl (garis akhir) akan menggerakkan kursor untuk mulai mencetak pada baris berikutnya.
  6. Cetak nilai variabel b di konsol bersama teks lainnya. Endl (garis akhir) akan menggerakkan kursor untuk mulai mencetak pada baris berikutnya.
  7. Buat fungsi bernama test() yang mengambil alamat variabel a dan b sebagai parameternya.
  8. Cetak beberapa teks di konsol. \n akan membuat baris kosong baru sebelum teks dicetak. Endl (garis akhir) akan menggerakkan kursor untuk mulai mencetak pada baris berikutnya setelah teks dicetak.
  9. Cetak nilai variabel a di konsol bersama teks lainnya. Endl (garis akhir) akan menggerakkan kursor untuk mulai mencetak pada baris berikutnya.
  10. Cetak nilai variabel b di konsol bersama teks lainnya. Endl (garis akhir) akan menggerakkan kursor untuk mulai mencetak pada baris berikutnya.
  11. Program harus mengembalikan nilai setelah berhasil diselesaikan.
  12. Akhir dari isi fungsi main().
  13. Mendefinisikan fungsi test(). Fungsi ini harus mengambil dua variabel penunjuk bilangan bulat *n1 dan *n2.
  14. Menetapkan variabel penunjuk *n1 nilai 10.
  15. Menetapkan variabel penunjuk *n2 nilai 11.
  16. Akhir dari isi fungsi test().

Meskipun, nilai baru ditetapkan ke variabel a dan b di dalam pengujian fungsi, setelah pemanggilan fungsi selesai, hal yang sama tidak tercermin pada fungsi luar main.

Menggunakan pointer sebagai argumen fungsi membantu meneruskan alamat sebenarnya variabel ke 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 diakses langsung dari fungsi 'test', dan oleh karena itu setiap perubahan yang dilakukan terhadap variabel-variabel ini akan tercermin dalam fungsi pemanggil 'main'.

Keuntungan menggunakan Pointer

Inilah kelebihan/manfaat menggunakan Pointer

  • Pointer adalah variabel yang menyimpan alamat lainnya variabel di C++.
  • Lebih dari satu variabel dapat dimodifikasi dan dikembalikan oleh fungsi menggunakan pointer.
  • Memori dapat dialokasikan dan dibatalkan alokasinya secara dinamis menggunakan pointer.
  • Pointer membantu menyederhanakan kompleksitas program.
  • Kecepatan eksekusi suatu program meningkat dengan menggunakan pointer.

Ringkasan

  • Pointer mengacu pada variabel yang menyimpan alamat 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 tanda ampersand (&).
  • Jika tidak ada alamat khusus untuk menetapkan variabel penunjuk, tetapkan NULL.