Penunjuk Void dalam C dan C : Mengapa Pemutus Penting?

Linda Hamilton
Lepaskan: 2024-10-30 12:39:26
asal
1001 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!

sumber:php.cn
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!