Apa yang batal* di C dan C++

Apa Yang Batal Di C Dan C



C dan C++ adalah dua bahasa pemrograman yang sangat bergantung pada pointer untuk manajemen memori dan manipulasi data. Pointer adalah variabel yang menyimpan alamat memori, yang memungkinkan program mengakses dan memanipulasi data yang disimpan dalam memori. Salah satu jenis pointer khusus adalah penunjuk batal (batal*) , juga dikenal sebagai a penunjuk umum .

Apa itu Pointer Kekosongan (batal*)?

Pointer batal, juga dikenal sebagai pointer generik, adalah pointer yang tidak terkait dengan tipe data tertentu, sehingga cocok untuk menunjuk ke tipe data apa pun. Dengan kata lain, a penunjuk kosong dapat menunjuk ke integer, karakter, string, atau tipe data lainnya. Fleksibilitas ini menjadikan void pointer sebagai alat yang ampuh dalam pemrograman C dan C++.

Deklarasi Void Pointer di C dan C++

Di C dan C++, file penunjuk kosong dideklarasikan melalui sintaks berikut:







ruang kosong * ptr ;

Penggunaan Void Pointer di C dan C++

Hapus pointer di C sebagian besar digunakan ketika tipe data suatu variabel tidak diketahui atau dapat bervariasi saat runtime. Mereka memungkinkan cara umum untuk menyimpan dan memanipulasi data tanpa perlu mengetahui tipe data spesifiknya. Ini sangat membantu terutama ketika berhadapan dengan fungsi atau struktur data yang dapat menangani berbagai jenis data.



Salah satu penggunaan umum dari pointer kosong ada dalam fungsi alokasi memori seperti malloc() yang mengembalikan titik penunjuk kosong ke blok memori yang dapat digunakan untuk menyimpan tipe data apa pun. Pemrogram kemudian dapat melemparkan penunjuk batal ke tipe data yang sesuai untuk mengakses dan memanipulasi data yang disimpan dalam blok memori yang dialokasikan.



Penggunaan lain dari void pointer di C adalah in pointer fungsi , yang merupakan variabel yang menyimpan alamat memori suatu fungsi. Void pointer dapat digunakan untuk menyimpan alamat memori dari fungsi apa pun, terlepas dari jenis kembalian atau daftar parameternya, yang memungkinkan lebih banyak fleksibilitas dalam penggunaan pointer fungsi.





Penggunaan pointer kosong di C++ hampir mirip, namun mereka juga dapat digunakan untuk membuat antarmuka umum untuk objek dari kelas yang berbeda. Ini sering dicapai melalui penggunaan fungsi virtual, yang memungkinkan objek dari kelas yang berbeda diperlakukan secara seragam. Selanjutnya, C++ menawarkan pemeriksaan tipe yang lebih ketat daripada C, yang artinya menggunakan pointer kosong salah dapat mengakibatkan lebih banyak kesalahan dan bug.

Poin yang Perlu Dipertimbangkan saat Menggunakan Void Pointer di C dan C++

Berikut adalah beberapa poin yang harus Anda pertimbangkan saat menggunakan pointer kosong dalam C dan C++.



1: Di C, ruang kosong* dapat digunakan sebagai nilai kembalian dan parameter fungsi tetapi dalam C++ Anda harus memiliki tipe data pointer tertentu.

Misalnya:

Dalam C, kode diberikan di bawah ini:

#termasuk

#termasuk

ruang kosong * add_numbers ( int A , int B ) {

int * hasil = malloc ( ukuran dari ( int ) ) ;

* hasil = A + B ;

kembali ( ruang kosong * ) hasil ;

}

ruang kosong print_result ( ruang kosong * hasil ) {

int * ptr = ( int * ) hasil ;

printf ( 'Hasilnya adalah: %d \N ' , * ptr ) ;

bebas ( ptr ) ;

}

int utama ( ) {

int angka1 = 5 , angka2 = 7 ;

ruang kosong * hasil = add_numbers ( angka1 , angka2 ) ;

print_result ( hasil ) ;

kembali 0 ;

}

Kode di atas mendefinisikan fungsi tambahkan_angka() yang mengembalikan a ruang kosong* pointer ke hasil penambahan dua bilangan bulat yang diteruskan sebagai argumen. Fungsi hasil_cetak() mengambil a penunjuk kosong* dan mencetak hasilnya. Dalam fungsi main(), kita memanggil tambahkan_angka() dan lulus hasilnya penunjuk kosong* ke hasil_cetak() untuk dicetak.

Di C++, tipe data tertentu diperlukan.

#termasuk

menggunakan namespace std ;

ruang kosong printInt ( int * pada satu ) {

cout << 'Bilangan bulat adalah:' << * pada satu << endl ;

}

int utama ( ) {

int X = 10 ;

int * ptr = & X ;

printInt ( ptr ) ;

kembali 0 ;

}

2: Di C, Anda dapat mengonversi penunjuk kosong ke jenis penunjuk lain melalui konversi implisit. Tetapi di C++ Anda harus menggunakan the konversi eksplisit untuk mengkonversi penunjuk kosong ke jenis penunjuk lainnya.

Berikut adalah contoh kode sederhana untuk C dan C++ untuk mengilustrasikan perbedaan antara implisit Dan konversi eksplisit dari pointer kosong ke jenis penunjuk lainnya:

Di C, kode berikut digunakan:

#termasuk

ruang kosong printChar ( ruang kosong * ch ) {

arang C = * ( arang * ) ch ;

printf ( '%C \N ' , C ) ;

}

int utama ( ) {

arang C = 'A' ;

ruang kosong * ptr = & C ;

printChar ( ptr ) ;

kembali 0 ;

}

Kode di atas mendefinisikan fungsi printChar yang mengambil void pointer sebagai parameter dan mencetak karakter yang disimpan di lokasi memori tersebut. Dalam fungsi utama, variabel char C didefinisikan dan alamatnya disimpan dalam void pointer ptr. Itu printChar fungsi kemudian dipanggil dengan penunjuk kosong 'ptr' sebagai argumen. Pointer batal secara eksplisit dikonversi menjadi pointer char di “printChar” berfungsi untuk mengakses dan mencetak nilai yang disimpan di 'C' .

Di C++, kode diberikan di bawah ini:

#termasuk

ruang kosong printInt ( ruang kosong * pada satu ) {

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

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

}

int utama ( ) {

int X = 10 ;

ruang kosong * ptr = & X ;

printInt ( ptr ) ;

kembali 0 ;

}

Kode di atas mendefinisikan fungsi printInt yang mengambil num pointer kosong sebagai parameter dan melemparkannya ke pointer integer menggunakan operator static_cast . Fungsi kemudian mencetak nilai integer yang ditunjuk oleh pointer yang dicor. Dalam fungsi utama, sebuah variabel bilangan bulat x didefinisikan dan alamatnya disimpan dalam a batal penunjuk ptr, yang kemudian diteruskan ke printInt fungsi. Output dari program ini adalah nilai x, yaitu 10.

Pikiran Akhir

Itu ruang kosong pointer di C dan C++ menyediakan cara ampuh untuk memanipulasi data tanpa perlu mengetahui tipe data spesifiknya. Mereka berguna untuk alokasi memori dan penunjuk fungsi, serta untuk membuat antarmuka generik untuk objek dari kelas yang berbeda di C++. Namun, penting untuk mempertimbangkan perbedaan antara C dan C++ dalam penggunaannya pointer kosong , seperti kebutuhan untuk tipe data tertentu dalam C++ dan kebutuhan untuk konversi eksplisit saat mentransmisikan pointer batal ke tipe pointer lainnya. Pertimbangan yang cermat terhadap poin-poin ini dapat mengarah pada penggunaan yang lebih efisien dan efektif pointer kosong dalam pemrograman.