Другие люди уже ответили, почему ваш код не работает с использованием неправильных индексов.Поскольку вы новичок в C ++, я подумал, что дам немного больше подробностей.
Массив в C ++ представлен непрерывной памятью.Когда вы объявляете массив строк, например: string bord[10]
, он эффективно выделяет память для 10 строковых объектов.
Что означает bord
, так это указатель на эту память.Массив работает с использованием арифметики указателей, то есть при использовании bord [4] это означает bord + 4*sizeof(string)
, что означает, что перед возвращением указателя есть 4 строковых элемента.Следовательно, bord[4]
указывает на 5-й элемент массива.Это объясняет, почему массивы C ++ основаны на 0.
Теперь, когда объявляется массив двух измерений, такой как string bord[10][10]
, он выделяет массив из 10 элементов, которые являются массивом из 10 строк.Так что bord[1][0]
в данном случае означает bord + 1*(sizeof(string[10]))
Если вы перейдете к большему индексу, чем размер вашего массива, вы получите память, которая может не принадлежать вашему массиву (запомните арифметику указателей).Это то, что называется переполнением буфера.
В вашем случае, например, при ссылке на bord[0][10]
вы действительно получите значение на bord[1][0]
, поскольку память после первого массива из 10 строк - это другой массив из 10 строк, но при ссылке на bord[10][0]
вы, скорее всего, получите нарушение прав доступа, поскольку эта память не принадлежит массиву.