01/10/2018, 15:19

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??

rogp10 viết 17:29 ngày 01/10/2018
  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 nó chạm vào biến khác thì tiêu tùng.
Restart All viết 17:19 ngày 01/10/2018

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]

Kiii viết 17:26 ngày 01/10/2018

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

C không quản lý bounds (rìa) của array nên bạn có thể index ra ngoài giới hạn mảng, compiler sẽ không check, nhưng đây là việc không nên làm bởi bạn đang cố viết ra ngoài vùng nhớ được cho phép và bạn có thể sẽ vô tình viết đè lên bộ nhớ mà chương trình khác đang dùng (khi này OS sẽ cản lại bằng cách quăng segfault).
Bài liên quan
0