incrémenter les membres de la structure
Dire que j'ai une structure définie comme suit
struct my_struct
{
int num;
};
....
Ici, j'ai un pointeur vers my_struct
et je veux faire un incrément sur num
void foo(struct my_struct* my_ptr)
{
//increment num
//method #1
my_ptr->num++;
//method #2
++(my_ptr->num);
//method #3
my_ptr->++num;
}
Faire ces 3 façons de l'incrémentation num
faire la même chose?
Pendant que nous y sommes, est-il vrai que la pré-incrémentation est plus efficace que la post-incrémentation?
Merci!
OriginalL'auteur user1508893 | 2012-09-30
Vous devez vous connecter pour publier un commentaire.
Deux premiers auront le même effet (en ligne sur leur propre comme que), mais la troisième méthode n'est pas valide code C (vous ne pouvez pas placer le
++
).Que de l'efficacité, il n'y a pas de différence. La différence que vous avez peut-être entendu des gens parler, c'est quand, en C++, vous incrémenter un non-pointeur de type de données, comme un itérateur. Dans certains cas, la pré-incrémentation peut être plus rapide.
Vous pouvez voir le code généré à l'aide de GCC Explorer.
De sortie:
Comme vous pouvez le voir, il n'y a pas de différence du tout.
La seule différence possible entre les deux premiers est le moment de les utiliser dans des expressions:
OriginalL'auteur Peter Alexander
Si votre seul objectif est d'incrémenter la valeur de num puis le 1er et le 2ème méthode donnera même été conçue suite à l'appel de la méthode.
Toutefois, si vous modifiez votre code à la suivante, vous pouvez voir la différence entre le code généré par gcc (au niveau de l'assemblée de code):
Maintenant, le compiler à l'aide de: gcc-masm=intel -S structTest.c -o structTest.s
Cette demande de gcc de générer le code assembleur:
Ouvrir structTest.s dans un éditeur de texte.
Et lorsque vous changez l'opération de pré-incrémentation, la suivante de code est généré:
Donc, vous voyez que dans le second cas, le compilateur incrémente le num de la valeur et passe sur ce num de la valeur à printf().
En termes de performances, je m'attends à la post-incrémentation d'être plus efficace car les emplacements de mémoire sont touché à un moins grand nombre de fois.
Les lignes importants ont été marquées entre ** dans le code ci-dessus.
OriginalL'auteur FunBoy