Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah Mengisytiharkan Tatasusunan Terapung dengan Saiz Dinamik Menghasilkan Ralat \"Ungkapan Malar Yang Dijangka\" dalam C ?

Mengapakah Mengisytiharkan Tatasusunan Terapung dengan Saiz Dinamik Menghasilkan Ralat \"Ungkapan Malar Yang Dijangka\" dalam C ?

DDD
DDDasal
2024-10-26 13:46:03829semak imbas

Why Does Declaring a Float Array with a Dynamic Size Result in an

Kekeliruan Saiz Tatasusunan Menyebabkan Ralat

Apabila mengisytiharkan tatasusunan apungan dengan saiz dinamik, seperti:

<code class="cpp">int size = 100;
float x[size][2];</code>

anda mungkin menghadapi ralat "ekspresi malar dijangka". Ini berlaku kerana C memerlukan tatasusunan mempunyai saiz tetap pada masa penyusunan, tidak ditentukan semasa masa jalan. Pembolehubah saiz di sini tidak boleh digunakan sebagai dimensi tatasusunan yang sah.

Penyelesaian dengan Vektor

Untuk mengelakkan isu ini, pertimbangkan untuk menggunakan vektor:

<code class="cpp">std::vector<std::array<float, 2>> x(size);</code>

Ini mencipta vektor tatasusunan, setiap tatasusunan mengandungi dua apungan.

Penyelesaian Alternatif

Sebagai alternatif, anda boleh menggunakan peruntukan memori mentah dengan baharu atau cipta sendiri jenis tatasusunan:

<code class="cpp">// With new
float (*px)[2] = new float[size][2];

// With custom array type
template<typename T, size_t N>
struct array {
  T data[N];
};

array<float, 2> myArray[size];</code>

Pilihan Tambahan

Pilihan lain termasuk menggunakan vektor pasangan atau melancarkan jenis tatasusunan anda sendiri dengan pembantu sintaks:

<code class="cpp">// Vector of pairs
std::vector<std::pair<float, float>> x(size);

// Custom array type
template<typename T>
struct identity {
  typedef T type;
};

using FloatArray2 = identity<float[2]>::type;
FloatArray2 myArray[size];</code>

Atas ialah kandungan terperinci Mengapakah Mengisytiharkan Tatasusunan Terapung dengan Saiz Dinamik Menghasilkan Ralat \"Ungkapan Malar Yang Dijangka\" dalam C ?. 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