What will be the output of the following C code?

4 phương ánCó giải thích
Đề bài
#include <stdio.h>
void main()
{
    int *ptr, a = 10;
    ptr = &a;
    *ptr += 1;
    printf("%d,%d\n", *ptr, a);
}

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: "11,11". Lệnh ptr = &a làm ptr giữ địa chỉ ô nhớ của a, nên *ptr và a là hai cách gọi cùng một chỗ chứ không phải hai bản sao; *ptr += 1 cộng 1 vào chính ô đó nên a thành 11, và khi in thì cả *ptr lẫn a đều đọc ra 11. Bản chất là bí danh: con trỏ không chứa giá trị, nó chỉ chứa địa chỉ. "10,10" sai vì phép cộng đã thực sự ghi vào bộ nhớ, giá trị không còn là 10. "10,11" sai vì *ptr không thể đọc ra giá trị cũ khi ô nhớ đã đổi. "11,10" sai vì a không phải bản sao riêng, nó chính là ô nhớ mà ptr trỏ tới, nên không thể giữ 10 trong khi *ptr đã là 11.

Cùng phần 5

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