2015-02-24 16 views
5

Xét đoạn mã sau snippets Trường hợp1:Tại sao có sự thay đổi trong hoạt động của toán tử dấu phẩy trong các mã bên dưới?

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

Trường hợp2:

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; 
    } 

Tôi không thể hiểu được lý do mà khi tôi sử dụng paranthesis trong trường hợp 2, sau đó tôi nhận được đầu ra như hellojoke4, trong khi không sử dụng parantheis tôi nhận được đầu ra như hellojoke5. Theo kết quả đầu ra khi tôi thử sử dụng toán tử bậc ba, thì biểu thức tương tự khi được thực hiện bằng cách sử dụng dấu ngoặc đơn hoặc không sử dụng dấu ngoặc đơn, trả về giá trị đầu ra cuối cùng của lệnh printf là hellojoke4, vì vậy hoàn toàn khác với hành vi trường hợp của toán tử bậc ba. Và sự hiện diện của dấu ngoặc đơn ảnh hưởng đến hoạt động của dấu phẩy như thế nào, nó hoạt động như một dấu phân tách hoặc như một toán tử

+2

Hãy suy nghĩ về nó. Những gì có thể ngoặc đơn có thể làm trong trường hợp này? – juanchopanza

+0

'int a = (1,2);' ',' có mức ưu tiên thấp hơn nên 'a = 2' – Gopi

Trả lời

9

Tất cả đều nằm dưới mức ưu tiên thấp của toán tử dấu phẩy. Nếu không có dấu ngoặc đơn, khái niệm được nhóm như

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

Vì vậy, một bài tập để a từ printf đầu tiên, tiếp theo là thứ hai printf. Trong ví dụ thứ hai, kết quả của số printf thứ hai được gán cho a.

Để đơn giản hóa:

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

Đó là điều tôi không thể hiểu được tại sao thông qua việc sử dụng dấu ngoặc đơn, kết quả thay đổi, trình biên dịch phân tích cú pháp điều này và trả về giá trị toán hạng cuối cùng. –

+2

@RADHAGOGIA Đó là những gì tôi đang giải thích trong câu trả lời của tôi. Bạn không hiểu phần nào? Bạn có biết toán tử dấu phẩy nào không? – juanchopanza

Các vấn đề liên quan