JavaScript is required

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(); }

A.

mmmm aaa nnnn

B.

ừm aaa nnn

C.

mmmm aaa nnn

D.

Một cái khác

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".

Câu hỏi liên quan