JavaScript is required

Anh (Chị) hãy cho biết kết quả của đoạn lệnh sau là gì?

void inc (void* data, int psize) {

if (psize == sizeof (char)) {

char* pchar;

pchar =(char*)data;

++(*pchar);

} else if (psize == sizeof(int)) {

int* pint;

pint = (int*)data;

++(*pint);

}

}

int main() { int s = 1642; inc(&s,sizeof(s));

cout << s << endl;

return 0;

}

A.

A. 1642

B.

B. 1641

C.

C. 1643

D.

D. Lỗi biên dịch.

Trả lời:

Đáp án đúng: C


Đoạn chương trình C++ này thực hiện việc tăng giá trị của một biến số nguyên (int) thông qua một hàm `inc` sử dụng con trỏ void. Hàm `inc` nhận vào một con trỏ void `data` và kích thước `psize` của dữ liệu mà con trỏ trỏ tới. Hàm này kiểm tra kích thước của dữ liệu. Nếu `psize` bằng kích thước của một `char`, nó ép kiểu con trỏ `data` thành một con trỏ `char` và tăng giá trị của byte mà con trỏ này trỏ tới. Nếu `psize` bằng kích thước của một `int`, nó ép kiểu con trỏ `data` thành một con trỏ `int` và tăng giá trị của số nguyên mà con trỏ này trỏ tới. Trong hàm `main`, biến `s` được khởi tạo với giá trị 1642. Sau đó, hàm `inc` được gọi với địa chỉ của `s` và kích thước của `s`. Vì `sizeof(s)` là kích thước của một số nguyên (thường là 4 byte), nên nhánh `else if (psize == sizeof(int))` sẽ được thực thi. Trong nhánh này, con trỏ `data` sẽ được ép kiểu thành con trỏ `int`, và giá trị của `s` sẽ được tăng lên 1. Do đó, giá trị của `s` sau khi gọi hàm `inc` sẽ là 1643. Cuối cùng, giá trị của `s` (1643) được in ra màn hình.

Câu hỏi liên quan