Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Tidak Boleh Menetapkan Tatasusunan Secara Terus dalam C dan C , Tetapi Saya Boleh Dalam Structs?
Tugasan Tatasusunan dalam C dan C
C dan C membenarkan penugasan tatasusunan secara ahli dalam struct tetapi tidak secara umum. Tingkah laku ini adalah hasil daripada evolusi sejarah bahasa.
Pada mulanya, tatasusunan dalam C telah dimodelkan sebagai penunjuk dalam ingatan, yang dikenali sebagai "tatasusunan masak." Apabila struktur diperkenalkan, tatasusunan dalam struktur telah dirawat secara berbeza untuk memastikan keselamatan ingatan. Ini membenarkan tatasusunan untuk ditugaskan mengikut ahli dalam struct tanpa menjejaskan keserasian dengan kod sedia ada.
Sebaliknya, penugasan tatasusunan di luar struct tidak disokong dalam reka bentuk asal C. Ini disebabkan oleh kebimbangan mengenai asas semula penunjuk dan kekurangan maklumat saiz untuk tatasusunan yang diisytiharkan sebagai parameter fungsi. Untuk mengelak daripada memperkenalkan pepijat dan isu keserasian, penugasan eksplisit menggunakan memcpy lebih diutamakan.
Walau bagaimanapun, seperti yang dinyatakan oleh Luther Blissett, spesifikasi C berkenaan penugasan struktur secara eksplisit membenarkan penugasan ahli tatasusunan terkandung. Ini adalah kesan sampingan reka bentuk yang tidak diingini, tetapi ia diterima sebagai satu cara untuk memudahkan penyalinan data dalam struct tanpa melanggar corak yang telah ditetapkan.
Oleh itu, sokongan untuk penugasan mengikut ahli tatasusunan dalam struct tetapi tidak secara amnya adalah warisan keputusan reka bentuk awal C dan evolusi bahasa seterusnya, menghasilkan perbezaan antara tatasusunan yang tertanam dalam struktur dan tatasusunan yang digunakan secara bebas.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menetapkan Tatasusunan Secara Terus dalam C dan C , Tetapi Saya Boleh Dalam Structs?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!