Pointeur C++ déclaration de tableau
Actuellement, j'ai plusieurs classes avec un tableau défini comme "float myIDs'. Je veux déplacer la variable dans ma classe parent et de le changer pour un pointeur ('float * myIDs').
Actuellement, je suis à la déclaration de ses valeurs comme ceci:
float myIDs[] = {
//Variables
};
Comme sa maintenant un pointeur, j'ai pensé qu'il serait à peu près la même:
myIDs = new float[] = {
};
mais cela ne semble pas y avoir de travail. Je ne suis pas sûr de savoir comment résoudre ce problème car je n'ai jamais eu à déclarer un pointeur de tableau comme ça avant.
Quelqu'un peut m'aider s'il vous plaît?
Grâce
- "Comme sa maintenant un pointeur" - non, c'est pas, c'est un tableau. Et pourquoi ne pas utiliser
std::vector<float>
si vous voulez un tableau dynamique? - Il y a beaucoup de confusion à cette question que vous avez demandé pour "pointeur de tableau", et il est difficile de dire si vous êtes à la demande d'un pointeur vers un tableau (qui peut être déduite du texte), ou un tableau de pointeurs (dans le titre). BTW. en écrivant `myIDs = new float[] = {}; vous essayez d'affecter une nouvelle valeur à ce nouveau float[] renvoie.
- Désolé pour la confusion, je voulais dire que c'est un pointeur sur un tableau, par opposition à un tableau de pointeurs.
Vous devez vous connecter pour publier un commentaire.
Si vous voulez un tableau de pointeurs de flotter, vous devez le déclarer comme tel. Vous avez déclaré juste un tableau de float. Le nom du tableau est un pointeur, bien sûr, mais dans le C sytnax il est traité de la même façon et juste une commodité.
Alternativement, vous pouvez utiliser
Et y accéder de la même manière comme un tableau:
float *x = myIDs[i];
new *float[n]
etnew **float
faire la même chose, même pas pourn==1
. D'ailleurs, je doute que le langage C++ a quelque chose commenew *float[n] = {}
.new float*[n]
et ne peut pas être initialisé à une valeur autre que zéro. Dans ton deuxième exemple,new float**
serait de retour d'unfloat***
et allouer seulement la mémoire de unfloat**
.Noter que vous n'êtes pas de l'allocation d'un tableau de pointeur, mais juste un tableau de float, donc, fondamentalement, vous du tableau deux ont le même type, elles ne veulent pas être stockés dans le même espace mémoire.
Seulement un allouée statiquement tableau peut être initialisé de cette façon, un allouée dynamiquement on ne peut pas être initialisé à une valeur autre que zéro.
Mais si vous connaissez les éléments à mettre dans le tableau, vous n'avez pas besoin d'allouer de façon dynamique.
Si vous voulez attribuer un tableau de pointeur, vous avez pour ce faire :
Mais seulement la allouée statiquement une (la première) peut être initialisé de la façon dont vous décrivez et bien sûr, il doit être initialisé avec des pointeurs.
Si vous voulez déclarer tableau de façon dynamique, vous pouvez le faire comme ceci:
Rappelez-vous juste pour libérer de la mémoire lorsque vous n'en avez plus besoin (par exemple, dans un destructeur de classe)
Si vous voulez un tableau alloué dynamiquement, vous devez utiliser le format suivant (ce que vous avez fait semble de plus en plus comme C#, C++)
Considérons le fragment de code suivant,
Cela donne une erreur
error: incompatible types in assignment of ‘int*’ to ‘int [2]’
.Je suis statiquement création d'un tableau de int .
a
est un pointeur(il est de type int[2]), mais il ne peut pas être utilisé pour pointer vers d'autres tableaux alloués dynamiquement parce qu'ils retournent un pointeur de typeint*
.Si vous souhaitez créer un tableau dynamiquement, vous devez attribuer à son adresse, à un
float*
Reportez-vous cette trop.