На самом деле, это концептуально (и практически) не отличается от следующего:
int trivialExample(char* array, int length)
{
char *ptr = &array[6];
if (length > 6)
{
std::cout << (*ptr) << std::endl;
}
}
Мое образованное предположение состоит в том, что вы намереваетесь назвать это так:
char buffer[4];
trivialExample(buffer, sizeof(buffer));
Ив C ++, как и в C, простое получение указателя на внешнюю часть объявленного массива (кроме последнего к последнему) вызывает неопределенное поведение , даже если не разыменовано.
Обоснованиеможет ли быть (есть?) архитектура, которая дает сбой просто при загрузке неверного адреса в регистр ЦП.
ОБНОВЛЕНИЕ : После некоторых исследований и подсказок от других пользователей SO, я 'Мы убедились, что C ++ не позволяет брать ссылку вне объявленного объекта, даже на элемент, следующий за последним.В этом конкретном случае результаты совпадают, за исключением элемента номер 6, который был бы разрешен в версии указателя, а не в справочной версии.