Tôi đã bắt gặp một kinh nghiệm kỳ lạ trong lập trình C. Xem xét mã này:
int main(){
int array1[6] = {0, 1, 2, 3, 4, 5};
int array2[6] = {6, 7, 8, 9, 10, 11};
printf("%d\n", array1[-1]);
return 0;
}
Khi tôi biên dịch và chạy nó, tôi không nhận được bất kỳ lỗi hay cảnh báo nào. Như giảng viên của tôi đã nói, chỉ số mảng -1
truy cập vào một biến khác. Tôi vẫn còn bối rối, tại sao một ngôn ngữ lập trình lại có khả năng này? Ý tôi là, tại sao cho phép các chỉ số mảng âm?
-1
của một phân đoạn là một cách hoàn toàn hợp lệ để tham chiếu đến phần tử trước mảng đó trong mảng lớn hơn. Mặt khác là nếu chỉ mục không hợp lệ, chương trình không hợp lệ, nhưng trong hầu hết các triển khai, bạn sẽ nhận được hành vi xấu im lặng, không phải là lỗi ngoài phạm vi.