Khi bạn thực thi đoạn mã C sau, kết quả sẽ như thế nào? void main() { char s[] = "man"; int i; for(i = 0; s[i] i++) printf("%c%c%c%c\t", s[i], *(s+i), *(i+s), i[s]); getch(); }
Trả lời:
Đáp án đúng: A
Đoạn mã C này duyệt qua chuỗi "man" và in ra các ký tự theo nhiều cách khác nhau.
* `s[i]` : Truy cập ký tự thứ `i` trong chuỗi `s` bằng cú pháp mảng.
* `*(s+i)` : Truy cập ký tự thứ `i` trong chuỗi `s` bằng cú pháp con trỏ. `s+i` trỏ đến địa chỉ của ký tự thứ `i`, và `*` giải tham chiếu để lấy giá trị tại địa chỉ đó.
* `*(i+s)` : Tương đương với `*(s+i)` do tính chất giao hoán của phép cộng.
* `i[s]` : Tương đương với `s[i]` theo định nghĩa của C. `a[i]` được định nghĩa là `*(a + i)` nên `i[a]` tương đương với `*(i + a)` hoặc `*(a + i)`.
Do đó, trong mỗi vòng lặp, mã sẽ in ra ký tự thứ `i` bốn lần, sau đó là một dấu tab (`\t`).
* Khi `i = 0`, ký tự là `m`, đầu ra là `mmmm`.
* Khi `i = 1`, ký tự là `a`, đầu ra là `aaaa`.
* Khi `i = 2`, ký tự là `n`, đầu ra là `nnnn`.
Vậy đáp án đúng là "mmmm aaa nnnn".





