Penunjuk C ++ untuk dibatalkan (Dengan Contoh)

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;

Artikel menarik...