Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Tugasan Penunjuk Void Berfungsi dalam C Tetapi Gagal dalam C ?

Mengapa Tugasan Penunjuk Void Berfungsi dalam C Tetapi Gagal dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-10-28 20:55:02421semak imbas

Why Does a Void Pointer Assignment Work in C But Fail in C  ?

Memahami Perbezaan Penunjuk Void Antara C dan C

Dalam bidang pengaturcaraan, memahami perbezaan antara C dan C adalah penting, terutamanya apabila ia datang kepada penunjuk batal. Persoalan biasa timbul mengenai mengapa kod C tertentu berjaya dikompilasi tetapi gagal dalam C .

Menetapkan Penunjuk Tidak Sah dalam C vs. C

Isu awal yang diserlahkan ialah ketidakupayaan daripada C untuk menetapkan penuding kosong yang dikembalikan oleh malloc() kepada penunjuk integer (int*). Walau bagaimanapun, dalam C, tugasan sedemikian dibenarkan kerana penukaran tersiratnya.

Penukaran Eksplisit C dengan Penunjuk Tidak Sah

Berbeza dengan C, C menguatkuasakan penukaran eksplisit apabila memberikan penunjuk tidak sah kepada penunjuk lain. Ini bermakna pelakon diperlukan untuk menukar penuding kosong (kosong) kepada penuding integer (int).

Peraturan Penukaran dan Prinsip K&R2

Prinsip K&R2 dalam C menyatakan bahawa sebarang penunjuk ke objek boleh ditukar kepada menaip void* tanpa kehilangan data. Begitu juga, menukarkan penuding kosong ini kembali kepada jenis penuding asalnya akan mengekalkan nilai asalnya.

Standard C pada Penukaran Penuding Tidak Sah

Membina berdasarkan prinsip C, C standard seterusnya menentukan bahawa penukaran daripada T kepada batal kekal tersirat. Walau bagaimanapun, penukaran daripada void* kepada mana-mana jenis penuding lain mesti dihantar secara eksplisit.

Ringkasnya, sementara C membenarkan penukaran tersirat ke dan dari penuding tidak sah, C memerlukan hantaran eksplisit untuk penukaran daripada void* kepada jenis penuding lain. Perbezaan ini memastikan keselamatan jenis dan menghalang kemungkinan ralat dalam kod C.

Atas ialah kandungan terperinci Mengapa Tugasan Penunjuk Void Berfungsi dalam C Tetapi Gagal dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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