C ++ Pointer untuk membatalkan (Dengan Contoh)

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 doublevariabel tipe. Namun, penunjuknya intbertipe.

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 ptrdiberi nilai &f.

Outputnya menunjukkan bahwa void pointer ptr menyimpan alamat dari sebuah floatvariabel f.

Karena voidmerupakan 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_castoperator. 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 voidpenunjuk ptr.

Karena kita tidak bisa mendereferensi sebuah voidpointer, kita tidak bisa menggunakannya *ptr.

Namun, jika kita mengonversi void*tipe pointer ke float*tipe, kita bisa menggunakan nilai yang ditunjukkan oleh voidpointer.

Dalam contoh ini, kami telah menggunakan static_castoperator 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_castlebih disukai daripada casting gaya C.

Catatan: void pointer tidak dapat digunakan untuk menyimpan alamat variabel dengan constatau volatilequalifier.

 void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;

Artikel yang menarik...