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

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

Patricia Arquette
Lepaskan: 2024-10-28 20:55:02
asal
609 orang telah melayarinya

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 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan