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;
}
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.