• STATISTIQUES
  • Il y a eu un total de 2 membres et 14617 visiteurs sur le site dans les dernières 24h pour un total de 14 619 personnes!


    Membres: 2 433
    Discussions: 3 585
    Messages: 32 832
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Infomirmo
    Challenge présenté sous la forme de 6 niveaux de difficultés diverses et variées avec chacun plusieurs chall...
    Challenges
    [EN] Dare your mind
    JavaScript: 6, Crypto: 44, Stegano: 36, Logic: 13, Special: 27, Science: 11, Realistic: 7, Programming: 10, Crack It: 6,...
    Challenges
    [FR] Secuser
    Actualité de la sécurité informatique, fiches virus et hoax, alertes par email, antivirus gratui...
    Hacking
    [EN] Hack this site
    Basic: 11, Realistic: 17, Application: 18, Programming: 12, Extbasic: 14, Javascript: 7, Stego: 17
    Challenges
    [EN] Astalavista
    JavaScript: 1, Exploit: 2, Crypto: 34, CrackIt: 15, Stegano: 8, Programming: 12, Logic: 36, Special: 6, Science: 4, Info...
    Challenges
    [EN] Listbrain Version 3
    Site proposant 66 challenges présentés dans une liste mélangée.
    Challenges
    [FR] Le site du zero
    Découvrez gratuitement la programmation (C, C++, PHP, MySQL, XHTML, CSS...), Linux, le Mapping, la modé...
    Programmation

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[C] pre/post incrementation.
22-09-2014, 13h18 (Modification du message : 22-09-2014, 13h20 par ark.)
Message : #1
ark Hors ligne
Psyckomodo!
*****



Messages : 1,033
Sujets : 48
Points: 317
Inscription : Sep 2011
[C] pre/post incrementation.
Yop,

un petit article pour expliquer la pré et post incrémentation.

Une incrémentation en C, c'est le fait d'augmenter la valeur d'une variable généralement d'une valeur de 1 (mais ce terme ne restreint pas a ça, on peut incrémenter de 2 ou 10 000, c'est pareil), a l'inverse, si on diminue la valeur d'une variable, on va dire qu'on la décrémente.

On va donc voir comment faire une incrémentation en C. Pour cela, il existe plusieurs solutions.
Code C :
int i = 0;

i = i + 1; /* très facilement compréhensible, on donne a i la valeur de lui même plus 1 */
i += 1; /* celle-ci est plus complexe pour un débutant, mais c'est juste la syntaxe qui est différente. C'est l'exact équivalent de celle du dessus. */

/* Et les deux qui nous intéressent plus particulièrement : */
++i;
i++;


On va donc s'attarder sur ces deux dernières instructions, qui sont un peu plus complexes, et n'ont pas toujours les mêmes effets.
  • ++i;
    Ceci s'appelle une pré-incrémentation, elle consiste a incrémenter directement la valeur de i avant de l'utiliser.
  • i++;
    Ceci s'appelle une post-incrémentation, elle consiste a incrémenter la valeur de i après l'avoir l’utilisée.

Voici un exemple pour être plus clair :
Code C :
#include <stdio.h>

int main(void) {
    int i = 0;

    printf("i = %d\n", ++i);
    printf("i = %d\n", i);

    return 0;
}


Ce code affichera :
Code BASH :
$> ./a.out
i = 1;
i = 1;


Si on modifie le code précédent afin d'effectuer une post-incrementation a la place, ca nous donne ca:
Code C :
#include <stdio.h>

int main(void) {
    int i = 0;

    printf("i = %d\n", i++);
    printf("i = %d\n", i);

    return 0;
}


Ce code affichera :
Code BASH :
$> ./a.out
i = 0;
i = 1;


Notez donc la différence importante entre ces deux opérateurs! l'un incrémente avant l’évaluation de l'expression, l'autre après !
Vous pouvez noter également que tout ceci est valable pour des décrémentation, il suffira de remplacer les ++ par des --.

Juste une remarque avant de finir, dans le cadre d'une boucle for, vous pourrez utiliser indifféremment la pré-incrémentation de la post-incrémentation.

Code C :
for (i = 0 ; i < 10 ; ++i) {
...
}
/* équivaut a */
for (i = 0 ; i < 10 ; i++) {
...
}


Car les blocks sont évalues indépendamment des autres.
Voila, si vous avez des questions, n’hésitez pas. ;)
+1 (2) -1 (0) Répondre
22-09-2014, 13h38
Message : #2
b0fh Hors ligne
Membre actif
*



Messages : 210
Sujets : 17
Points: 309
Inscription : Jul 2012
RE: [C] pre/post incrementation.
Juste une petite remarque: dans les cas ou les deux sont acceptables, mieux vaut utiliser une pré-incrémentation (++i) qu'une post-incrémentation (i++). Dans de très rare cas, ça peut économiser une allocation ou un registre. Et l'effet peut être plus marqué en C++, où le post-incrément peut parfois créer une copie inutile d'un objet volumineux.
+1 (2) -1 (0) Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut