Вывод: [1 2 3 10 11] [2 3 10 11 12 13]. Первые два append меняют массив arr, следующие добавления работают с новым массивом.
Какой вывод получит программа №64
Вывод: [1 2 3 10 11] [2 3 10 11 12 13]. Первые два append меняют массив arr, следующие добавления работают с новым массивом.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что отобразится в консоли после выполнения следующего кода на Go:
import ("fmt"
)
func main(){
arr:=[5]int{1, 2, 3, 4, 5}
bar := arr[1:3]
bar = append(bar,10)
bar = append(bar,11)
bar = append(bar,12)
bar = append(bar,13)
fmt.Println(arr, bar)
}
Вопрос проверяет понимание того, как работают срезы, их ёмкость и как append может приводить к переаллокации базового массива.
Ответ
Вывод: [1 2 3 10 11] [2 3 10 11 12 13]. Первые два append меняют массив arr, следующие добавления работают с новым массивом.
bar = arr[1:3] имеет длину 2 и вместимость 4. Значения 10 и 11 занимают свободные позиции общего массива, меняя arr[3] и arr[4].
Добавление 12 превышает capacity и переносит срез в другой массив. Значения 12 и 13 поэтому не попадают в arr, но уже записанные 10 и 11 сохраняются. Точная вместимость нового массива не важна для ответа: его отделение происходит при добавлении пятого элемента bar.