Array[n] vs Array[10]: Memulakan Tatasusunan dengan Variable vs Numeric Literal
Dalam C , ralat berlaku apabila memulakan tatasusunan dengan pembolehubah sebagai saiznya, seperti yang dilihat dalam kod di bawah:
int n = 10; double tenorData[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Ralatnya ialah: "objek bersaiz pembolehubah 'tenorData' mungkin tidak dimulakan." Ini kerana tatasusunan bersaiz berubah-ubah tidak dibenarkan dalam C .
G membenarkan gelagat ini sebagai lanjutan, tetapi ia tidak mematuhi piawaian C secara teknikal. Untuk membetulkan isu ini, seseorang boleh sama ada memperuntukkan memori secara dinamik atau menggunakan bekas standard.
Peruntukan Memori Dinamik
int n = 10; double* a = new double[n];
Ingat untuk mengosongkan memori yang diperuntukkan menggunakan padam [] a; apabila selesai.
Bekas Standard
int n = 10; std::vector<double> a(n);
Tatasusunan Malar
Jika tatasusunan yang betul dikehendaki, ia boleh dimulakan dengan nilai malar dan bukannya pembolehubah:
const int n = 10; double a[n];
Dalam C 11, constexpr boleh digunakan apabila mendapatkan saiz tatasusunan daripada fungsi:
constexpr int n() { return 10; } double a[n()];
Atas ialah kandungan terperinci Mengapakah Memulakan Tatasusunan C dengan Saiz Pembolehubah Menghasilkan Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!