Rumah > pembangunan bahagian belakang > C++ > Penunjuk Void dalam C dan C : Mengapa Pemutus Penting?

Penunjuk Void dalam C dan C : Mengapa Pemutus Penting?

Linda Hamilton
Lepaskan: 2024-10-30 12:39:26
asal
1126 orang telah melayarinya

 Void Pointers in C and C  : Why Does Casting Matter?

Penunjuk Kosong dalam C dan C : Menyingkap Perbezaan

Apabila bekerja dengan penunjuk, terdapat percanggahan yang ketara antara sintaks C dan C, terutamanya berkenaan dengan penunjuk tidak sah. Dalam C, penetapan penuding kosong kepada penuding jenis lain dibenarkan, manakala dalam C ia memerlukan hantaran yang jelas.

Pertimbangkan contoh berikut:

<code class="c">int* p = malloc(sizeof(int));</code>
Salin selepas log masuk

Kod ini menyusun berjaya dalam C kerana malloc mengembalikan penuding kosong, yang boleh ditetapkan dengan selamat kepada penuding integer dalam C. Walau bagaimanapun, percubaan yang sama dalam C akan mengakibatkan ralat penyusunan.

Walau bagaimanapun, dalam konteks yang berbeza, kod berikut disusun dalam kedua-dua C dan C tanpa isu:

<code class="c">void foo(void* vptr)
{
}

int main()
{
    int* p = (int*) malloc(sizeof(int));
    foo(p);
    return 0;
}</code>
Salin selepas log masuk

Percanggahan ini berpunca daripada penukaran penunjuk tersirat dan eksplisit dalam C dan C, masing-masing. Dalam C, kedua-dua penukaran adalah tersirat, membolehkan peralihan mudah antara jenis penunjuk. Walau bagaimanapun, dalam C , sementara penukaran daripada jenis penuding kepada penuding kosong kekal tersirat, penukaran dalam arah bertentangan memerlukan hantaran yang jelas.

Pembezaan ini diserlahkan dalam manual rujukan bahasa C (K&R2), yang secara eksplisit menyatakan bahawa hanya penukaran daripada penuding objek kepada penuding kosong disokong tanpa kehilangan maklumat.

Sebagai perbandingan, piawaian C menetapkan peraturan yang lebih ketat, mewajibkan hantaran eksplisit apabila menukar daripada penuding kosong kepada mana-mana jenis penuding lain , dengan itu memastikan keselamatan jenis dan mencegah kemungkinan ralat penunjuk.

Atas ialah kandungan terperinci Penunjuk Void dalam C dan C : Mengapa Pemutus Penting?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan