Xem xét rằng không có vị trí zeroeth trong một chuỗi bên ngoài máy tính, không nên đặt câu hỏi thực sự là: tại sao các chuỗi dựa trên 0 trong một số ngôn ngữ lập trình phổ biến hơn? (Tôi không chắc chắn về tuyên bố "gần như mọi ngôn ngữ lập trình" vì có nhiều ngôn ngữ hơn hầu hết mọi người biết đến)
Các chuỗi trong C và các ngôn ngữ khác chỉ đơn giản là một mảng các ký tự (nghĩa là char[]
) bị null
hủy bỏ. Đây là lý do tại sao bạn có thể tham chiếu các ký tự riêng lẻ bằng cách sử dụng ký hiệu chỉ mục (nghĩa là stringVariable[index]
). Các biến là một địa chỉ đến một vị trí trong bộ nhớ. Chỉ số là phần bù cho địa chỉ bắt đầu của mảng. Vì vậy, khi suy nghĩ về các chuỗi là một mảng, sẽ đủ ý nghĩa để tương tác với chúng theo kiểu 0 vì nó ít nhất là nhất quán ngay cả khi đôi khi hơi khó xử.
Tại sao điều này khác nhau trong SQL? Tôi đoán rằng nó phải làm với SQL là về lưu trữ vật lý nhiều hơn là cấp phát bộ nhớ. Mặc dù một số RDBMS thực hiện các mảng hỗ trợ (như PostgreSQL), nhưng điều đó không chuẩn. SQL cũng là một ngôn ngữ khai báo cấp cao, ẩn các chi tiết hoạt động của những gì công cụ truy vấn đang thực sự làm, và vì vậy các khái niệm về địa chỉ và con trỏ chỉ là không có. Do đó, thực sự không có ý nghĩa gì khi nghĩ về các chỉ mục dựa trên 0 khi làm việc với SQL.
Như một poster khác lưu ý, nguồn lập chỉ mục dựa trên zero là địa chỉ. Địa chỉ đầu tiên trong bất kỳ khối dữ liệu nào kết thúc bằng 0 (cho dù nó chiếm chữ số cuối cùng trong bộ nhớ vật lý hay không). Và đó không chỉ là máy tính - địa chỉ của ngôi nhà đầu tiên trong khu phố của bạn có khả năng là một số như 300 - chứ không phải 301.
Khi lập trình các hàm lặp trong đó các mô đun được sử dụng (để thực hiện điều gì đó cứ sau 5 lần lặp, v.v.) thì thật tiện lợi - và nhanh hơn - để làm việc với các mảng dựa trên zero.
Xin vui lòng xem: