2015-02-24 11 views
5

Rozważmy następujący kod urywki Przypadek 1:Dlaczego istnieją różnice w działaniu operatora przecinka w poniższych kodach?

int main() 
{ 
int a; 
a=printf("hello"),printf("joke"); 
printf("%d",a); 
return 0; 
} 

Przypadek 2:

int main() 
{ 
int a; 
a=(printf("hello"),printf("joke")); 
printf("%d",a); 
return 0; 
} 

Case3:

int main() 
{ 
int a; 
a=10>8?(printf("hello"),printf("joke")):printf("hello"); 
printf("%d",a); 
return 0; 
} 

Case4:

int main() 
    { 
    int a; 
    a=10>8?printf("hello"),printf("joke"):printf("hello"); 
    printf("%d",a); 
    return 0; 
    } 

Nie jestem w stanie wyłapać powodu, dla którego kiedy używam paranthezy w przypadku 2, otrzymuję wyjście jako hellojoke4, podczas gdy bez użycia parantheis otrzymuję wyjście jako hellojoke5.

Tak jak na wyjściu, kiedy próbowałem używać operatora trójskładnikowego, to samo wyrażenie, gdy wykonywane jest przy pomocy paranthezy lub bez użycia paranthezy, zwraca ostatnią wartość wyjściową instrukcji printf, która jest hellojoke4, więc w jaki sposób zachowanie różni się w przypadek operatora trójskładnikowego. A w jaki sposób obecność paranteza wpływa na działanie przecinka, działa jak separator lub jako operator

+2

Pomyśl o tym. Co może zrobić nawias w tym przypadku? – juanchopanza

+0

'int a = (1,2);' ',' ma niższy priorytet, więc 'a = 2' – Gopi

Odpowiedz

9

To wszystko w porównaniu do niskiego pierwszeństwa operatora przecinków. Bez nawiasów ekspresja pogrupowane

(a=printf("hello")), printf("joke"); 

Tak więc, zadanie do a od pierwszego printf, a następnie przez drugi printf. W drugim przykładzie wynik drugiego printf jest przypisany do a.

Upraszczając:

a = 1, 2; // (a = 1), 2; post-condition a==1 
a = (1, 2); // a = (1, 2); is equivalent to a = 2; post-condition a==2 
+0

Tego właśnie nie jestem w stanie zrozumieć, dlaczego, dzięki zastosowaniu paranthezy, wynik zmienia się, tak jak kompilator analizuje tę rzecz i zwraca ostatnią wartość operandy. –

+2

@RADHAGOGIA To właśnie wyjaśniałem w mojej odpowiedzi. Której części nie rozumiesz? Czy wiesz, co robi operator przecinków? – juanchopanza

Powiązane problemy