What is the output of the following code snippet?

4 phương ánCó giải thích
Đề bài
void main()
{
        int const *p = 5;
        printf("%d", ++(*p));
        getchar();
}

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: "Compile error". Khai báo ở đây nói p là con trỏ tới int có tính bất biến, nghĩa là không được phép ghi vào vùng mà p trỏ tới. Vì vậy phép tăng áp lên nội dung được trỏ tới là ghi vào một đối tượng bất biến và trình dịch phải báo lỗi, không cần biết p đang trỏ đi đâu. Mã còn một chỗ sai nữa ngay trên đó: gán số 5 cho một con trỏ mà không ép kiểu cũng là vi phạm ràng buộc kiểu. Lựa chọn "5" giả định lệnh in chạy được và phép tăng không có hiệu lực, nhưng chương trình không bao giờ tới được bước thực thi. Lựa chọn "6" giả định phép tăng thành công, điều mà tính bất biến chặn lại ngay lúc dịch; hơn nữa nếu có chạy thì việc đọc nội dung tại địa chỉ 5 cũng làm chương trình gãy. Lựa chọn "NULL" không ứng với gì vì p được gán 5 chứ không phải hằng con trỏ rỗng.

Cùng phần 5

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