Dalam tutorial ini, kita akan belajar tentang void pointer dan bagaimana menggunakannya dengan bantuan contoh.
Sebelum Anda melanjutkan dengan tutorial ini, pastikan untuk memeriksa petunjuk C ++.
Di C ++, kami tidak dapat menetapkan alamat variabel dari satu tipe data ke penunjuk tipe data lain. Pertimbangkan contoh ini:
// pointer is of int type int *ptr; // variable is of double type double d = 9.0; // Error // can't assign double* to int* ptr = &d;
Di sini, kesalahan terjadi karena alamatnya adalah double
variabel tipe. Namun, penunjuknya int
bertipe.
Dalam situasi seperti itu, kita dapat menggunakan pointer ke void (void pointer) di C ++. Sebagai contoh,
// void pointer void *ptr; double d = 9.0; // valid code ptr = &d;
The kekosongan pointer adalah pointer generik yang digunakan ketika kita tidak tahu jenis data variabel yang pointer menunjuk ke.
Contoh 1: C ++ Void Pointer
#include using namespace std; int main() ( void* ptr; float f = 2.3f; // assign float address to void ptr = &f; cout << &f << endl; cout << ptr << endl; return 0; )
Keluaran
0xffd117ac 0xffd117ac
Di sini, penunjuk ptr
diberi nilai &f
.
Outputnya menunjukkan bahwa void pointer ptr menyimpan alamat dari sebuah float
variabel f.
Karena void
merupakan tipe kosong, penunjuk kosong tidak dapat dideferensiasi.
void* ptr; float* fptr; float f = 2.3; // assign float address to void pointer ptr = &f; cout << *ptr << endl; // Error // assign float address to float pointer fptr = &f; cout << *fptr << endl; // Valid
Contoh 2: Mencetak Isi Void Pointer
Untuk mencetak konten penunjuk kosong, kami menggunakan static_cast
operator. Ini mengubah penunjuk dari void*
tipe ke tipe data masing-masing dari alamat yang disimpan penunjuk:
#include using namespace std; int main() ( void* ptr; float f = 2.3f; // assign float address to void pointer ptr = &f; cout << "The content of pointer is "; // use type casting to print pointer content cout << *(static_cast(ptr)); return 0; )
Keluaran
Isi dari pointer adalah 2.3
Program ini mencetak nilai alamat yang ditunjukkan oleh void
penunjuk ptr.
Karena kita tidak bisa mendereferensi sebuah void
pointer, kita tidak bisa menggunakannya *ptr
.
Namun, jika kita mengonversi void*
tipe pointer ke float*
tipe, kita bisa menggunakan nilai yang ditunjukkan oleh void
pointer.
Dalam contoh ini, kami telah menggunakan static_cast
operator untuk mengonversi tipe data penunjuk dari void*
menjadi float*
.
Pengecoran gaya-C
Kita juga bisa menggunakan casting C-style untuk mencetak nilainya.
// valid cout << *((float*)ptr);
Namun, static_cast
lebih disukai daripada casting gaya C.
Catatan: void pointer tidak dapat digunakan untuk menyimpan alamat variabel dengan const
atau volatile
qualifier.
void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;