2 votes

Incrémentation délicate d'un tableau en C

Je ne comprends pas pourquoi avant l'instruction if ++b[1] est égal à 1, mais après l'instruction if ++b[1] est égal à 0. Pourquoi ++b[1] n'augmente pas à l'intérieur de l'instruction if?

#include 

int main()
{
    int c = 0;
    int b[3] = {4};
    printf("%d\n", ++b[1]); // retourne 1
    b[1]--;
    if((c-- && ++b[1])|| b[0]++)
    {
        printf("%d\n", b[1]); // retourne 0
        printf("%d\n", c); // retourne -1
    }
    return 0;
}

3voto

rom1v Points 1613
if((c-- && ++b[1])|| b[0]++)

c-- produit 0, donc ++b[1] n'est pas évalué.

Cela s'appelle l'évaluation paresseuse.

2voto

miradulo Points 17096

Il y a juste une utilisation confuse de l'opérateur ici.

  • c-- est un décrément postfixe, et donc dans l'instruction conditionnelle c est évalué comme faux (car il est 0), avant d'être décrémenté.
  • Maintenant, comme && court-circuite et n'évalue que la deuxième condition si la première est vraie, nous n'évaluons pas ++b[1], mais entrons dans la condition sur la véracité de b[0]++.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X