2011-12-13 3 views
0

J'ai un problème à propos de cette syntaxe .
Le problème dit:
calculer l'histogramme des occurrences de noms utilisant un réseau de structures attribuées dynamiquement lors de l'exécution
Je l'ai résolu de cette manière (je préfère utiliser pastebin pour éviter de coller trop de code ici):

main.cpphttp://pastebin.com/TD6Y2Acf
dinalloc.cpphttp://pastebin.com/93eM9EdL
dinalloc.hhttp://pastebin.com/bUX7TxTs

Cela fonctionne, mais je ne peux pas comprendre pourquoi ...
J'ai déclaré une structure appelée hi et un tableau de cette structures appelé vet. Lorsque, dans le dinalloc.cpp je déclare les paramètres de la fonction, je dois écrire hi *vet. De cette façon, cela signifie que je dis à la fonction d'attendre un pointeur vers une structure hi, ou non? Au lieu de cela, quand j'appelle la fonction, je donne vet comme paramètre, c'est un tableau des structures hi.
Comment est-ce possible que ce code fonctionne?Affectation dynamique d'un tableau de struct

P.S. Tout conseil concernant ma méthode d'écriture de code est le bienvenu.

+0

"le problème dit" - devoirs? – codeling

+0

Non. C'est un exercice que j'ai essayé de faire après la leçon sur l'allocation dynamique de la mémoire. – Overflowh

Répondre

2

Votre code est correct. En fait, array est un pointeur vers son premier élément, et c'est ce que vous avez obtenu de votre nouvel opérateur.

Même si vous aviez un code comme

const int n = 5; 
hi vet[n]; 
// ... 
printHistogram(vet, n); 

Il est toujours correct. Selon 4,2 alinéa de la C++ standart,

une lvalue ou rvalue de type « réseau de N T » ou « pointeur vers T » « tableau de inconnue lié de T » peut être converti en un prvalue type. Le résultat est un pointeur vers le premier élément du tableau.

+0

Grande réponse, bienvenue à SO. –

+0

@fabianhjr merci :) – prazuber

+0

@PraZuBeR Donc, ce n'est pas important que salut est une structure? Suffit-il que je déclare le pointeur à hi et que je donne à la fonction (quand j'appelle) un pointeur vers un tableau? Ou c'est le tableau qui est un pointeur générique vers une zone de mémoire? – Overflowh