Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Tidak Boleh Memulakan Tatasusunan C dengan Panjang Pembolehubah?

Mengapa Saya Tidak Boleh Memulakan Tatasusunan C dengan Panjang Pembolehubah?

Linda Hamilton
Linda Hamiltonasal
2024-12-15 09:05:11553semak imbas

Why Can't I Initialize a C   Array with a Variable Length?

Memahami Permulaan Tatasusunan dengan Pembolehubah lwn. Huruf Numerik

Masalah:

Dalam C , cuba untuk memulakan tatasusunan dengan panjang berubah-ubah, seperti int n = 10; double tenorData[n] = {1, 2, 3, ...}, menghasilkan ralat penyusunan. Walau bagaimanapun, memulakan dengan panjang tetap, seperti double tenorData[10], berjaya. Mengapa ini berlaku?

Jawapan:

Dalam C , tatasusunan bersaiz berubah-ubah tidak dibenarkan. Walaupun sambungan dalam penyusun tertentu (cth., G ) membenarkannya, ia tetap menyalahi undang-undang mengikut standard. Untuk mencipta tatasusunan dengan panjang berubah-ubah dalam C , anda boleh sama ada:

  • Peruntukkan memori secara dinamik: Peruntukkan memori secara manual menggunakan penunjuk, tetapi ingat untuk mengagihkannya kemudian.
  • Gunakan bekas standard: Gunakan bekas seperti std::vector untuk mengendalikan memori dinamik pengurusan.

Jika anda masih memerlukan tatasusunan, pertimbangkan untuk menggunakan nilai malar dan bukannya pembolehubah:

  • Malar: Isytiharkan saiz tatasusunan sebagai pemalar, seperti const int n = 10; double a[n];, kerana pemalar dinilai pada masa penyusunan.
  • Constexpr (C 11 ): Untuk nilai yang ditentukan oleh fungsi, gunakan constexpr, yang juga menilai ungkapan pada masa penyusunan.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Memulakan Tatasusunan C dengan Panjang Pembolehubah?. 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