Tại sao gán 5[m] = 10 và printf("%d", m[5]) thì kết quả in ra là 10?

Mình khai báo một mảng int m[5]
Khi mình gán 5[m] = 10 và printf("%d", m[5]);
Thì nó vẫn in ra 10, vì sao vậy ??
m chỉ từ m[0] đến m[4] thôi mà, và có thể gán 5[m] thay vì m[5] hay sao?
5[m] có ý nghĩa gì khác không??

  1. Với m là mảng (hoặc con trỏ) 5[m] với m[5] là như nhau thật.
  2. Còn đọc ghi m[5] thì hên xui :smiley: nó chạm vào biến khác thì tiêu tùng.
1 Like

Theo mình nghĩ. Bạn viết 5[m] nó sẽ offset 5 từ điểm bắt đầu chương trình sau đó cộnh thêm m là địa chỉ tương đối của mảng (m này là giá trị offset của mảng m so với điểm bắt đầu của chương trình). Vì vậy nó tương đương với m[5]

Mảng m chỉ từ 0 -> 4 nhưng bạn vẫn có thể gán được cho nó tại index 100 vì lý do C hay C++ nó không quản lý mấy thằng này nên bạn vẫn có thể gán vô tư mà không bị báo lỗi nhưng làm như thế giống như bạn đang vi phạm luật pháp vậy :v:

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