2011-05-02 5 views
2

Possible en double:
++i + ++i + ++i in Java vs Cjava vs entier c

Utilisation de Java:

public class Main { 
    public static void main(String[] args) { 
     int a=10; 
     a=a++; 
     a=a++; 
     System.out.println(a); 
    } 
} 

sortie: 10

Utilisation turbo C:

void main(){ 
    int a=10; 
    a=a++; 
    a=a++; 
    printf("%d",a); 
} 

Sortie: 12 Comment cela se produit-il?

+0

Veuillez ne pas utiliser ': -' pour séparer le nom et la valeur. Il semble que la sortie soit une valeur négative. – asgs

+0

Cela nous a tous rendus confus dans votre dernière question ... – MByD

Répondre

13

a=a++ est undefined behavior. donc même deux programmes C pourraient renvoyer des résultats différents pour cela. Le suffixe ++ incrémente la variable après l'opération, mais vous ne savez pas si elle va incrémenter la variable après le calcul de la bonne expression ou après l'affectation, et vous ne savez pas si cela affectera le résultat ou pas.

En supposant que b est un registre temporaire/variable utilisée pour le calcul de l'expression droite:

Option 1:

un est associé à b, b affectée à a, b incrémenté de un. (A sera le même)

Option 2:

un est associé à b, b incrémentée de un, b affecté à un. (un sera incrémenté)

+0

allez-vous s'il vous plaît expliquer un peu plus? – mriganka3

+0

@mrig - voir la mise à jour de la réponse. – MByD