а.Порядок переменных в памяти:
arr2[0]
arr2[1]
arr1[0]
arr1[1]
, код печатает 3, потому что он использует арифметику указателей.Вычитание & arr1 [1] из & arr2 [0] означает разницу в 3 целых.
b.Поскольку на r никогда не ссылаются, компилятор C ++ может оптимизировать его.
c.Не позитивно, но я не верю, что стандарт C ++ определяет явный порядок переменных в стеке.Поэтому компилятор может свободно переупорядочивать эти переменные, даже помещая дополнительное пространство между ними так, как считает нужным.Так что да, его реализация специфична.Другой компилятор мог бы так же легко дать -1, как и ответ.