C++ ialah bahasa yang ditaip kuat, dan setiap pembolehubah perlu menentukan jenisnya. Apabila menulis atur cara, penunjuk sering digunakan Penunjuk boleh menunjuk ke alamat dalam ingatan dan melakukan operasi baca dan tulis pada nilai di alamat tersebut. Walau bagaimanapun, apabila menggunakan penunjuk, sering berlaku ketidakpadanan antara jenis penunjuk dan jenis pembolehubah, yang menyebabkan pengkompil melaporkan ralat.
Masalah ketidakpadanan antara jenis penunjuk dan jenis pembolehubah secara amnya berlaku dalam proses pemindahan dan penetapan parameter fungsi. Sebagai contoh, kami mentakrifkan pembolehubah integer a, dan kemudian mentakrifkan pembolehubah penunjuk p yang menunjuk kepada jenis titik terapung Kemudian kami menetapkan alamat a kepada penunjuk p Kod ini adalah seperti berikut:
int a = 10; float *p; p = &a;
Kod ini kelihatan sangat mudah, tetapi Ia akan menyebabkan pengkompil melaporkan ralat kerana penunjuk p ialah penunjuk titik terapung dan a ialah pembolehubah integer, dan jenisnya tidak sepadan. Pada masa ini, pengkompil akan menggesa kami dengan mesej ralat bahawa jenis penunjuk dan jenis pembolehubah tidak sepadan.
Jadi bagaimana kita nak selesaikan masalah ini? Terdapat dua cara untuk menyelesaikannya.
Kaedah 1: Gunakan penunjuk jenis yang sama
Kaedah 1 agak mudah, kita hanya perlu menentukan penunjuk jenis yang sama. Jika kita perlu menetapkan alamat pembolehubah integer kepada penunjuk, maka kita perlu menentukan penunjuk integer jika kita perlu menetapkan alamat pembolehubah titik terapung kepada penunjuk, kita perlu menentukan penunjuk titik terapung; . Jika kita menulis semula kod di atas dan mentakrifkan penunjuk integer, kodnya adalah seperti berikut:
int a = 10; int *p; p = &a;
Pada masa ini, pengkompil tidak akan melaporkan ralat kerana penunjuk p dan pembolehubah a adalah daripada jenis yang sama.
Kaedah 2: Gunakan penukaran jenis
Kaedah 2 lebih fleksibel Kita boleh menukar jenis penunjuk supaya sama dengan jenis pembolehubah melalui penukaran jenis. Terdapat tiga cara penukaran jenis dalam C++: penukaran jenis paksa, static_cast dan dynamic_cast. Di sini kami memperkenalkan penukaran jenis paksa, kodnya adalah seperti berikut:
int a = 10; float *p; p = (float*)&a;
Seperti yang anda lihat, tambahkan kurungan kecil sebelum jenis penunjuk, dan kemudian tulis jenis yang hendak ditukar menjadi dalam kurungan, kemudian anda boleh melakukan penukaran jenis paksa . Perlu diingatkan di sini bahawa penukaran jenis paksa boleh menyebabkan ralat menjalankan program, jadi apabila kami melakukan penukaran jenis paksa, kami perlu memastikan bahawa hasil penukaran adalah betul.
Ringkasan:
Masalah ketidakpadanan antara jenis penunjuk dan jenis pembolehubah sering berlaku dalam C++. Kita boleh menyelesaikan masalah ini dengan menggunakan penunjuk jenis yang sama atau menggunakan penukaran jenis. Untuk penukaran jenis paksa, anda perlu menggunakannya dengan berhati-hati untuk memastikan hasil penukaran adalah betul.
Atas ialah kandungan terperinci Ralat C++: jenis penunjuk dan jenis pembolehubah tidak sepadan, bagaimana untuk menyelesaikannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!