Apakah void* dalam C dan C++

Apakah Void Dalam C Dan C



C dan C++ ialah dua bahasa pengaturcaraan yang sangat bergantung pada petunjuk untuk pengurusan memori dan manipulasi data. Penunjuk ialah pembolehubah yang menyimpan alamat memori, yang membenarkan atur cara mengakses dan memanipulasi data yang disimpan dalam ingatan. Satu jenis penunjuk khas ialah penunjuk kosong (kosong*) , juga dikenali sebagai a penunjuk generik .

Apakah itu Penunjuk Void (kosong*)?

Penunjuk lompang, juga dikenali sebagai penuding generik, ialah penuding yang tidak dikaitkan dengan mana-mana jenis data tertentu, menjadikannya sesuai untuk menunjuk kepada mana-mana jenis data. Dengan kata lain, a penunjuk kosong boleh menunjuk kepada integer, aksara, rentetan atau mana-mana jenis data lain. Fleksibiliti ini menjadikan penunjuk tidak sah sebagai alat yang berkuasa dalam pengaturcaraan C dan C++.

Pengisytiharan Void Pointer dalam C dan C++

Dalam C dan C++, the penunjuk kosong diisytiharkan melalui sintaks berikut:







batal * ptr ;

Penggunaan Void Pointer dalam C dan C++

Petunjuk tidak sah dalam C kebanyakannya digunakan apabila jenis data pembolehubah tidak diketahui atau boleh berubah pada masa jalan. Mereka membenarkan cara generik untuk menyimpan dan memanipulasi data tanpa perlu mengetahui jenis data khususnya. Ia berguna terutamanya apabila berurusan dengan fungsi atau struktur data yang boleh mengendalikan pelbagai jenis data.



Satu kegunaan biasa penunjuk kosong berada dalam fungsi peruntukan ingatan seperti malloc() yang mengembalikan titik penuding kosong ke blok memori yang boleh digunakan untuk menyimpan sebarang jenis data. Pengaturcara kemudian boleh menghantar penunjuk kekosongan kepada jenis data yang sesuai untuk mengakses dan memanipulasi data yang disimpan dalam blok memori yang diperuntukkan.



Satu lagi penggunaan penunjuk kosong dalam C adalah dalam penunjuk fungsi , yang merupakan pembolehubah yang menyimpan alamat memori sesuatu fungsi. Penunjuk tidak sah boleh digunakan untuk menyimpan alamat memori bagi mana-mana fungsi, tanpa mengira jenis pemulangan atau senarai parameter, membolehkan lebih fleksibiliti dalam penggunaan penuding fungsi.





Penggunaan penunjuk kosong dalam C++ hampir serupa, namun, ia juga boleh digunakan untuk mencipta antara muka generik untuk objek kelas yang berbeza. Ini sering dicapai melalui penggunaan fungsi maya, yang membolehkan objek dari kelas yang berbeza dirawat secara seragam. Selanjutnya, C++ menawarkan pemeriksaan jenis yang lebih ketat daripada C, yang bermaksud menggunakan penunjuk kosong salah boleh mengakibatkan lebih banyak ralat dan pepijat.

Perkara yang Perlu Dipertimbangkan semasa Menggunakan Penunjuk Void dalam C dan C++

Berikut adalah beberapa perkara yang perlu anda pertimbangkan semasa menggunakan penunjuk kosong dalam C dan C++.



1: Dalam C, kosong* boleh digunakan sebagai nilai pulangan dan parameter fungsi tetapi dalam C++ anda mesti mempunyai jenis data penuding tertentu.

Sebagai contoh:

Dalam C, kod diberikan di bawah:

#include

#include

batal * tambah_nombor ( int a , int b ) {

int * hasil = malloc ( saiz ( int ) ) ;

* hasil = a + b ;

kembali ( batal * ) hasil ;

}

batal hasil_cetak ( batal * hasil ) {

int * ptr = ( int * ) hasil ;

printf ( 'Hasilnya ialah: %d \n ' , * ptr ) ;

percuma ( ptr ) ;

}

int utama ( ) {

int nombor1 = 5 , nombor2 = 7 ;

batal * hasil = tambah_nombor ( nombor1 , nombor2 ) ;

hasil_cetak ( hasil ) ;

kembali 0 ;

}

Kod di atas mentakrifkan fungsi add_numbers() yang mengembalikan a kosong* penunjuk kepada hasil penambahan dua integer diluluskan sebagai hujah. Fungsinya hasil_cetak() mengambil a void* penunjuk dan mencetak hasilnya. Dalam fungsi main(), kita panggil add_numbers() dan lulus yang terhasil void* penunjuk kepada hasil_cetak() untuk percetakan.

Dalam C++, jenis data tertentu diperlukan.

#include

menggunakan ruang nama std ;

batal printInt ( int * pada satu ) {

cout << 'Integer ialah:' << * pada satu << endl ;

}

int utama ( ) {

int x = 10 ;

int * ptr = & x ;

printInt ( ptr ) ;

kembali 0 ;

}

2: Dalam C, anda boleh menukar penuding kosong kepada jenis penuding lain melalui penukaran tersirat. Tetapi dalam C++ anda perlu menggunakan penukaran eksplisit untuk menukar penunjuk kosong kepada mana-mana jenis penunjuk lain.

Berikut ialah contoh kod mudah untuk kedua-dua C dan C++ untuk menggambarkan perbezaan antara tersirat dan penukaran eksplisit daripada penunjuk kosong kepada jenis penunjuk lain:

Dalam C, kod berikut digunakan:

#include

batal printChar ( batal * ch ) {

char c = * ( char * ) ch ;

printf ( '%c \n ' , c ) ;

}

int utama ( ) {

char c = 'a' ;

batal * ptr = & c ;

printChar ( ptr ) ;

kembali 0 ;

}

Kod di atas mentakrifkan fungsi printChar yang mengambil penunjuk kekosongan sebagai parameter dan mencetak aksara yang disimpan di lokasi memori itu. Dalam fungsi utama, pembolehubah char c ditakrifkan dan alamatnya disimpan dalam penunjuk kosong ptr. The printChar fungsi kemudian dipanggil dengan penunjuk kosong 'ptr' sebagai hujah. Penunjuk kosong ditukar secara eksplisit kepada penunjuk char dalam “printChar” berfungsi untuk mengakses dan mencetak nilai yang disimpan “c” .

Dalam C++, kod diberikan di bawah:

#include

batal printInt ( batal * pada satu ) {

int * ptr = static_cast < int *> ( pada satu ) ;

std :: cout << * ptr << std :: endl ;

}

int utama ( ) {

int x = 10 ;

batal * ptr = & x ;

printInt ( ptr ) ;

kembali 0 ;

}

Kod di atas mentakrifkan fungsi printInt yang mengambil nombor penunjuk tidak sah sebagai parameter dan menghantarnya ke penunjuk integer menggunakan pengendali static_cast . Fungsi itu kemudian mencetak nilai integer yang ditunjuk oleh penuding yang dipancarkan. Dalam fungsi utama, pembolehubah integer x ditakrifkan dan alamatnya disimpan dalam a void pointer ptr, yang kemudiannya diserahkan kepada printInt fungsi. Output program ialah nilai x, iaitu 10.

Fikiran Akhir

The batal penunjuk dalam C dan C++ menyediakan cara yang berkuasa untuk memanipulasi data tanpa perlu mengetahui jenis data khususnya. Ia berguna untuk peruntukan memori dan penunjuk fungsi, serta untuk mencipta antara muka generik untuk objek kelas yang berbeza dalam C++. Walau bagaimanapun, adalah penting untuk mempertimbangkan perbezaan antara C dan C++ dalam penggunaannya penunjuk kosong , seperti keperluan untuk jenis data tertentu dalam C++ dan keperluan untuk penukaran eksplisit apabila menghantar penunjuk tidak sah kepada jenis penuding lain. Pertimbangan yang teliti terhadap perkara ini boleh membawa kepada penggunaan yang lebih cekap dan berkesan penunjuk kosong dalam pengaturcaraan.