Mengapa Saya Tidak Boleh Memulakan Saiz Tatasusunan dengan Pembolehubah `const int` dalam C ?

Susan Sarandon
Lepaskan: 2024-10-28 21:17:30
asal
931 orang telah melayarinya

Why Can't I Initialize an Array Size with a `const int` Variable in C  ?

Dilema Sukar untuk Pemulaan Saiz Tatasusunan dengan const int

Dalam alam C , penggunaan pemalar untuk permulaan saiz tatasusunan sering menimbulkan dilema yang membingungkan. Walaupun sesetengah situasi membenarkan amalan ini dengan lancar, yang lain mencetuskan ralat kompilasi samar.

Pertimbangkan coretan kod berikut:

<code class="cpp">const int size = 2;
int array[size] = {0};</code>
Salin selepas log masuk

Dalam contoh ini, pengkompil dengan senang hati membenarkan pengisytiharan tatasusunan dengan saiz yang ditentukan oleh 'saiz' pembolehubah malar. Sebabnya terletak pada sifat ungkapan permulaan untuk 'saiz'. Ia adalah ungkapan yang berterusan, bermakna ia boleh dinilai sepenuhnya pada masa penyusunan. Ini membolehkan pengkompil menentukan saiz tepat tatasusunan semasa penyusunan, memudahkan peruntukan memori dengan sewajarnya.

Berbeza dengan perkara di atas, lihat coretan ini:

<code class="cpp">int a = 2;
const int size = a;
int array[size] = {0};</code>
Salin selepas log masuk

Di sini, pengkompil melemparkan patut, meratapi "ralat penyusunan." Inti masalahnya terletak pada ungkapan yang digunakan untuk memulakan 'saiz'. Ia melibatkan pembolehubah tidak tetap ('a'). Ini menurunkan ungkapan kepada alam ungkapan tidak tetap. Akibatnya, pengkompil tidak dapat memastikan saiz tatasusunan pada masa penyusunan.

Tingkah laku ini berpunca daripada keputusan asas oleh jawatankuasa piawaian C. Jawatankuasa mengutamakan kesederhanaan dan eksplisit daripada fleksibiliti. Melaksanakan yang terakhir akan memerlukan analisis aliran yang kompleks, membezakan antara ungkapan yang tidak boleh diubah suai seperti 'const int size = a;' dan ungkapan yang benar-benar tidak tetap seperti 'const int size = foo();'. Kerumitan sedemikian dianggap tidak diingini.

Oleh itu, peraturan kekal: saiz tatasusunan hanya boleh dimulakan menggunakan ungkapan malar. Ini memastikan bahawa pengkompil boleh menentukan saiz tatasusunan dengan jelas, memastikan peruntukan memori boleh diramal dan penyusunan lancar. Sentiasa ingat peraturan ini apabila menceburi dunia pemulaan saiz tatasusunan.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Memulakan Saiz Tatasusunan dengan Pembolehubah `const int` dalam C ?. 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