J'ai du mal à comprendre le peu de code suivant que j'espérais créer un tableau sur le tas et le remplir avec les caractères 9 jusqu'à 0 (je sais que je pourrais index juste le tableau comme un tableau de pile normale avec [] notation à faire cela, mais je le fais de cette façon d'essayer de comprendre les pointeurs plus en profondeur):Création de tableaux sur le tas et adressage avec des pointeurs
int *ptrHeapArray = new int[10];
for(int f=9; f>=0 ;f--)
{
*ptrHeapArray = f;
ptrHeapArray++;
}
for(int f=0; f<10; f++)
cout << ptrHeapArray[f] << "\n";
il imprime des valeurs compleletly inattendues. Comme je comprends ce qui précède, la commande 'new' crée un tableau sur le tas et m'envoie un pointeur vers l'adresse où se trouve le tableau. Puisque le pointeur que j'affecte (ptrHeapArray) est de taille int, j'ai supposé que je pourrais utiliser l'incrémentation de post de pointeur pour naviguer dans le tableau. Cependant, les résultats indiquent que mes hypothèses sont fausses. Cela m'a amené à penser que peut-être le pointeur renvoyé par le mot clé 'new' est juste un pointeur sur le tableau entier et ne peut pas être utilisé pour parcourir le tableau pour une raison quelconque. J'ai donc essayé de créer un autre pointeur vers le pointeur renvoyé par le « nouveau » mot-clé et utilisé que pour faire ma population tableau:
int *ptrHeapArray = new int[10]; //array to hold FRANK data in 32 bit chunks
int *ptrToHeapArrayPointer = ptrHeapArray;
for(int f=9; f>=0 ;f--)
{
*ptrToHeapArrayPointer = f;
ptrToHeapArrayPointer++;
}
for(int f=0; f<10; f++)
cout << ptrHeapArray[f] << "\n";
Cela a bien fonctionné. Quelqu'un peut-il m'expliquer pourquoi je devais faire cela et ne pas avoir utilisé le pointeur que le mot-clé 'new' m'a transmis?
Merci
Il fondamentalement clobbers la tête de votre tableau –
@Nathan: ne pas le mettre de cette façon. Vous ne faites pas de distinction entre le pointeur et ce qu'il pointe vers. C'est une distinction que les nouveaux programmeurs trouvent souvent difficile. "La tête du tableau" n'est pas tabassée (écrasée) du tout. C'est inchangé. Il n'y a plus de pointeur. – MSalters