What is the output?

4 phương ánCó giải thích
Đề bài
#include <stdio.h>
int main(){
    int a=6,b=15;
    int* ptr1= &a, *ptr2=&b;
    *ptr1 +=12-b+ (*ptr2);
    *ptr2 = b + a- 2*(*ptr1);
    printf("%d, %d, %d", a,b,b+a*3);
}

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "18, -3, 51". Hai con trỏ ptr1 và ptr2 lần lượt trỏ tới a và b, nên ghi qua con trỏ là ghi thẳng vào hai biến đó. Lệnh thứ nhất tính 12 - b + (*ptr2) với b bằng 15, được 12 - 15 + 15 là 12, rồi cộng dồn vào a nên a thành 6 + 12 là 18. Lệnh thứ hai tính b + a - 2*(*ptr1) với b bằng 15 và a đã là 18, được 15 + 18 - 36 là -3, gán qua ptr2 nên b thành -3. Lệnh in xuất a là 18, b là -3, còn b + a*3 do phép nhân ưu tiên hơn phép cộng nên bằng -3 + 54 là 51. Dãy "12, 3, 39" ứng với việc lấy 12 làm giá trị mới của a thay vì cộng dồn vào giá trị cũ. Kết luận "Syntax error" không đúng, mọi lệnh đều hợp cú pháp kể cả việc khai hai con trỏ trên một dòng. Kết luận "Runtime error" cũng không, hai con trỏ đều trỏ vào biến cục bộ còn sống nên không có truy cập bất hợp lệ.

Cùng phần 5

Xuất hiện trong 1 bộ đề