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 doublepemboleh ubah jenis. Walau bagaimanapun, penunjuk adalah intjenis.
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 ptrdiberi nilai &f.
Output menunjukkan bahawa ptr pointer void menyimpan alamat floatpemboleh ubah f.
Seperti voidjenis 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_castoperator. 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 voidpointer ptr.
Oleh kerana kita tidak dapat menghindarkan voidpenunjuk, kita tidak dapat menggunakan *ptr.
Namun, jika kita menukar void*jenis penunjuk ke float*jenis, kita dapat menggunakan nilai yang ditunjukkan oleh voidpenunjuk.
Dalam contoh ini, kami telah menggunakan static_castoperator 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_castlebih disukai daripada pemeran gaya C.
Nota: pointer tidak boleh digunakan untuk menyimpan alamat pemboleh ubah dengan constatau volatilekelayakan.
void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;








