What is the output when the sample code below is executed?

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

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: "1006". Hàm main truyền &x, tức địa chỉ của x, nên tham số ptr trỏ đúng vào ô nhớ của x. Trong hàm, (*ptr)++ lấy nội dung tại ô đó rồi tăng chính ô đó lên một, vì vậy x ở main thành 1006 trước khi printf chạy; đây là cách duy nhất để một hàm trong C sửa được biến của nơi gọi. Cặp ngoặc quanh phép lấy nội dung là chi tiết quan trọng: nếu viết thiếu nó thì phép tăng áp lên bản thân con trỏ chứ không lên giá trị được trỏ tới. Lựa chọn "1005" là giá trị cũ, chỉ đúng nếu hàm nhận một bản sao int và tăng bản sao đó. Lựa chọn "0" không ứng với bước nào vì x được khởi tạo 1005 và chỉ chịu một phép tăng. Lựa chọn "1007" đòi hai lần tăng, trong khi hàm chỉ được gọi một lần và thân hàm chỉ có một phép tăng.

Cùng phần 5

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