Cho một danh sách móc nối với các phần tử trong danh sách có kiểu S1 được định nghĩa như sau:
struct S1 {
int info;
struct S1 * next;
} *head;
Biết con trỏ “head” lưu địa chỉ của phần tử đầu tiên trong danh sách. Cho biết mục đích của câu lệnh sau:
c
Sao chépChỉnh sửa
head->next->next->info = 111;
Trả lời:
Đáp án đúng: B
Câu hỏi này kiểm tra kiến thức về con trỏ và cách truy cập các phần tử trong danh sách liên kết đơn.
`head` là con trỏ trỏ đến phần tử đầu tiên của danh sách.
`head->next` sẽ trả về con trỏ trỏ đến phần tử thứ hai của danh sách.
`head->next->next` sẽ trả về con trỏ trỏ đến phần tử thứ ba của danh sách.
`head->next->next->info` sẽ truy cập vào trường `info` của phần tử thứ ba trong danh sách.
Do đó, câu lệnh `head->next->next->info = 111;` sẽ gán giá trị 111 cho trường `info` của phần tử thứ ba trong danh sách. Vậy đáp án B đúng.
Các phương án khác:
- A sai vì câu lệnh sẽ không bị lỗi nếu danh sách có ít nhất 3 phần tử. Nếu danh sách ít hơn 3 phần tử, chương trình sẽ bị lỗi khi truy cập vào một vùng nhớ không hợp lệ (nullptr).
- C sai vì câu lệnh thay đổi giá trị của phần tử thứ 3, không phải thứ 2.
- D sai vì câu lệnh chỉ thay đổi giá trị của phần tử thứ 3, không phải một phần tử bất kỳ.