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
Susan Sarandonasal
2024-12-19 08:53:09785semak imbas

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};

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!

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