Rumah > pembangunan bahagian belakang > C++ > Mengapakah Memulakan Tatasusunan C dengan Saiz Pembolehubah Menghasilkan Ralat?

Mengapakah Memulakan Tatasusunan C dengan Saiz Pembolehubah Menghasilkan Ralat?

Susan Sarandon
Lepaskan: 2024-12-19 08:53:09
asal
871 orang telah melayarinya

Why Does Initializing a C   Array with a Variable Size Result in an Error?

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};
Salin selepas log masuk

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];
Salin selepas log masuk

Ingat untuk mengosongkan memori yang diperuntukkan menggunakan padam [] a; apabila selesai.

Bekas Standard

int n = 10;
std::vector<double> a(n);
Salin selepas log masuk

Tatasusunan Malar

Jika tatasusunan yang betul dikehendaki, ia boleh dimulakan dengan nilai malar dan bukannya pembolehubah:

const int n = 10;
double a[n];
Salin selepas log masuk

Dalam C 11, constexpr boleh digunakan apabila mendapatkan saiz tatasusunan daripada fungsi:

constexpr int n()
{
    return 10;
}

double a[n()];
Salin selepas log masuk

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!

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