Cần giải thích giúp tại sao ar[*p++] = 3

Mong mọi người giải thích giúp em tại sao ar[*p++] = 3

int ar[] = { 10,15,4,25,3,-4 }, *p, i;
p = &ar[2];

Khi m == 3, nếu ta gọi n = m++; thì n == 3, m == 4

p = &ar[2];*p == ar[2] == 4

ar[*p++] == ar[*p](với p ban đầu) == ar[4] == 3

Nói thêm: *p++ chính là *(p++) nên sau khi gọi phép tính này, p sẽ trỏ đến ar[3] hay *p == 25

5 Likes

Giải ra từ từ:
Ban đầu p là int* => *p là int, ar là int*. Về kiểu thì ổn.

  1. Dòng tiếp theo cũng như là p = ar + 2; Vậy *p là slot 2 bằng 4.
  2. Ta nhớ ++ trước * sau thì do post-increment nên lấy ngay *(ar + 4) là slot 4 bằng 3 rồi mới tăng p.
    Còn pre-increment thì phải +1 trước.
  3. Xong xuôi, p == ar + 3.
4 Likes

Cám ơn a đã bớt thời gian để giải thích giúp em. Rất chi tiết và dễ hiểu ạ.
Thêm nữa là ở dòng code cuối cùng của anh, giá trị *p là 25 đúng ko a.

cám ơn a đã bớt chút thời gian để giải đáp giúp em. Em đã hiểu, cám ơn anh và cộng đồng nhiều

e chạy code ra giá trị 25 chứ ko phải 5 anh ạ.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?