Dalam tutorial ini, kita akan belajar mengenai petunjuk kosong dan cara menggunakannya dengan bantuan contoh.
Sebelum meneruskan tutorial ini, pastikan untuk memeriksa petunjuk C ++.
Dalam C ++, kita tidak dapat menetapkan alamat pemboleh ubah satu jenis data ke penunjuk jenis 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, ralat berlaku kerana alamatnya adalah double
pemboleh ubah jenis. Walau bagaimanapun, penunjuk adalah int
jenis.
Dalam situasi seperti itu, kita boleh menggunakan penunjuk untuk membatalkan (void pointer) dalam C ++. Sebagai contoh,
// void pointer void *ptr; double d = 9.0; // valid code ptr = &d;
The penunjuk tidak sah adalah penunjuk generik yang digunakan apabila kita tidak tahu jenis data bagi pembolehubah yang mata penunjuk kepada.
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; )
Pengeluaran
0xffd117ac 0xffd117ac
Di sini, penunjuk ptr
diberi nilai &f
.
Output menunjukkan bahawa ptr pointer void menyimpan alamat float
pemboleh ubah f.
Seperti void
jenis kosong, penunjuk yang tidak sah tidak dapat dihentikan.
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 Kandungan Void Pointer
Untuk mencetak kandungan penunjuk kosong, kami menggunakan static_cast
operator. Ia menukar penunjuk dari void*
jenis ke jenis data masing-masing alamat yang disimpan oleh 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; )
Pengeluaran
Kandungan penunjuk adalah 2.3
Program ini mencetak nilai alamat yang ditunjukkan oleh void
pointer ptr.
Oleh kerana kita tidak dapat menghindarkan void
penunjuk, kita tidak dapat menggunakan *ptr
.
Namun, jika kita menukar void*
jenis penunjuk ke float*
jenis, kita dapat menggunakan nilai yang ditunjukkan oleh void
penunjuk.
Dalam contoh ini, kami telah menggunakan static_cast
operator untuk menukar jenis data penunjuk dari void*
menjadi float*
.
Pemutus gaya C
Kami juga boleh menggunakan coran gaya C untuk mencetak nilainya.
// valid cout << *((float*)ptr);
Walau bagaimanapun, static_cast
lebih disukai daripada pemeran gaya C.
Nota: pointer tidak boleh digunakan untuk menyimpan alamat pemboleh ubah dengan const
atau volatile
kelayakan.
void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;