2010-07-20 5 views
4

J'ai une structure C (non C++) longue. Il est utilisé pour contrôler les entités dans un jeu, avec la position, certaines données de comportement, rien de clinquant, sauf pour deux chaînes. La structure est globale.Mise à zéro manuelle des variables VS structure de copie

En ce moment, chaque fois qu'un objet est initialisé, je mets toutes les valeurs par défaut, un par un

myobjects[index].angle = 0; myobjects[index].speed = 0; 

comme ça. Cela ne me semble pas très lent, mais je me demande si copier une structure "template" avec toutes les valeurs définies par défaut est plus rapide ou plus pratique. Donc, pour résumer en deux questions: Est-il plus rapide de copier une structure au lieu de définir manuellement toutes les données? Que dois-je garder à l'esprit à propos de la mémoire malloc-ed pour les chaînes?

Répondre

2

"Plus pratique" est probablement la partie la plus importante.

struct s vs[...]; 
... 
// initialize every member to "default" 
// but can't use in normal assignment 
struct s newv = {0}; 
vs[...] = newv; 

Ou cacher les "détails d'initialisation" derrière une fonction init (ou une macro, si vous n'aimez pas du code maintenable :-)

struct s* init_s (struct s* v, ...) { /* and life goes on */ } 
1

Vous pouvez utiliser cette séquence:

memset(myobjects+index,0,sizeof(myobjects[0]); 

si tout ce dont vous avez besoin est de mettre tous les membres à zéro

Attention: si un membre particulier est pointeur, il sera régler la valeur NULL

Nelu Cozac

+0

alternative: memset (& MyObjects [index], 0, sizeof (MyObjects [index])) – nmichaels

Questions connexes