Le tableau sera-t-il copié correctement si je passe un struct S à cette fonction ?
Oui, il sera copié.
dois-je changer la fonction en : void some_fun( struct S * myS )
Vous pouvez le faire pour trois raisons :
-
Vous voulez éviter de copier - passer un pointeur est plus économique
-
Vous voulez apporter des modifications à la structure à l'intérieur
some_fun
- Les pointeurs vous permettent de le faire ; le passage par valeur ne permet pas de le faire.
-
Vous voulez réduire le risque de débordement de pile. - si le tableau est grand, passer par valeur peut faire déborder la pile. Le passage par pointeur réduit considérablement ce risque.
EDIT : Puisqu'il s'agit de C++, vous avez la possibilité de passer l'option struct
par référence :
void some_fun( S& myS ) // struct keyword is optional in C++
o
void some_fun( const S& myS ) // Do this if you do not plan on modifying myS
Le passage par référence évite la copie d'une manière similaire au passage par pointeur. Contrairement au passage par un pointeur, le passage par référence indique au lecteur que l'élément struct
transmis fait référence à un endroit quelconque de la mémoire, alors que les pointeurs vous donnent la possibilité de transmettre une NULL
.