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 *p; p = (char*)data;
++(*p);
}
}
struct hocsinh { string hoten; int namsinh; } ;
int
main() {
char ten = 'A';
hocsinh hs[3]
for (int i = 0; i < 3; i++) {
hs[i].hoten = ten; hs[i].namsinh = 1990 + i;
inc (&ten,sizeof(ten));
}
cout << hs[1].hoten << “ - “ << hs[1].namsinh << endl;
return 0;
}
Trả lời:
Đáp án đúng: B
Đoạn code trên thực hiện một vòng lặp 3 lần, trong đó có một hàm `inc` được gọi để tăng giá trị của biến `ten` kiểu `char`. Hàm `inc` nhận một con trỏ `void*` và kích thước của dữ liệu. Nếu kích thước dữ liệu là kích thước của `char`, nó sẽ ép kiểu con trỏ `void*` thành `char*` và tăng giá trị của biến được trỏ đến. Trong vòng lặp, biến `ten` được khởi tạo là 'A'.
Trong mỗi lần lặp:
- `hs[i].hoten` được gán giá trị của `ten`.
- `hs[i].namsinh` được gán giá trị `1990 + i`.
- Hàm `inc` được gọi để tăng `ten`.
Vậy:
- Lần lặp 1: `ten` = 'A', `hs[0].hoten` = 'A', `hs[0].namsinh` = 1990, `ten` tăng thành 'B'.
- Lần lặp 2: `ten` = 'B', `hs[1].hoten` = 'B', `hs[1].namsinh` = 1991, `ten` tăng thành 'C'.
- Lần lặp 3: `ten` = 'C', `hs[2].hoten` = 'C', `hs[2].namsinh` = 1992, `ten` tăng thành 'D'.
Cuối cùng, `cout` in ra `hs[1].hoten` và `hs[1].namsinh`. Theo như phân tích, `hs[1].hoten` = 'B' và `hs[1].namsinh` = 1991.