Mảng nên được đánh thứ tự từ 0 hay 1?
A: (Trả lời ngày 19/03/2015 bởi Anders Kaseorg, đang học Tiến sĩ Khoa học máy tính MIT, đồng sáng lập Ksplice)
Link: https://qr.ae/pNKP45
————-
Chỉ số của mảng nên luôn luôn được đánh từ 0. Đây không phải là mẹo gì cho máy tính ngày xưa, hay không liên quan gì đến tầng bộ nhớ, hay là ngẫu nhiên mà có do thói quen – không phải vậy. Đánh chỉ số từ 0 giúp đơn giản hóa các phép toán liên quan đến mảng rất nhiều dành cho lập trình viên. Đơn giản hơn đồng nghĩa sẽ ít gặp lỗi hơn. Ví dụ nhé:
- Bạn đang làm bảng băm cho số nguyên vào m đoạn. Nếu mỗi đoạn đánh số từ 0, code sẽ là bucket = key mod m. Nhưng nếu đánh từ 1, bạn phải viết là bucket = (key mod m) + 1
- Bạn đang chuỗi hóa một mảng 2 chiều các điểm ảnh, dài w, cao h (cứ tưởng tượng sẽ biến thành 1 mảng 1 chiều độ dài w*h). Nếu đánh số từ 0: điểm (x,y) sẽ có chỉ số là y*w + x. Nếu đánh từ 1, chỉ số ấy phải là y*w + x – w
- Bạn đang đưa bảng chữ cái từ ‘A’ đến ‘Z’ vào mảng 26 phần tử, với hàm ord trả về mã ASCII. Nếu đánh từ 0, chữ cái c sẽ có vị trí ord(c) – ord(‘A’). Còn nếu đánh từ 1: ord(c) – ord(‘A’) + 1
Thực sự, việc đếm từ 1 mới là do thói quen trước giờ: ngôn ngữ loài người thì đếm “thứ nhất”, “thứ hai”… trước khi ta phát minh ra số 0. Việc đó giải thích rằng chẳng hạn những năm 1800, cụ thể là từ ngày 01/01/1801 đến 31/12/1900, được gọi là “Thế kỷ XIX”.