Maison  >  Article  >  développement back-end  >  Pourquoi la déclaration d'un tableau flottant avec une taille dynamique entraîne-t-elle une erreur « Expression constante attendue » en C ?

Pourquoi la déclaration d'un tableau flottant avec une taille dynamique entraîne-t-elle une erreur « Expression constante attendue » en C ?

DDD
DDDoriginal
2024-10-26 13:46:03829parcourir

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

La confusion dans la taille du tableau provoque une erreur

Lors de la déclaration d'un tableau flottant avec une taille dynamique, telle que :

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

vous pouvez rencontrer une erreur « expression constante attendue ». Cela se produit car C exige que les tableaux aient des tailles fixes au moment de la compilation, non déterminées au moment de l'exécution. La variable de taille ici ne peut pas être utilisée comme dimension de tableau valide.

Solution avec vecteur

Pour éviter ce problème, pensez à utiliser un vecteur :

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

Cela crée un vecteur de tableaux, chaque tableau contenant deux flottants.

Solutions alternatives

Vous pouvez également utiliser l'allocation de mémoire brute avec new ou créer la vôtre type de tableau :

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

Options supplémentaires

D'autres options incluent l'utilisation d'un vecteur de paires ou le lancement de votre propre type de tableau avec des assistants de syntaxe :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn