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

DDD
Lepaskan: 2024-10-26 13:46:03
asal
828 orang telah melayarinya

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

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

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

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

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!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!