Sobes.tech
Назад к вопросам
Junior — Middle
93

Если передать срез в функцию без указателя, повлияет ли это на исходный массив?

Ответ от нейросети

sobes.tech AI

В Go срез (slice) — это структура, которая содержит указатель на массив, длину и ёмкость. Когда вы передаёте срез в функцию без указателя, копируется сама структура среза, но не копируется underlying массив.

Это значит, что изменения элементов среза внутри функции повлияют на исходный массив, так как оба среза указывают на один и тот же массив. Однако если внутри функции вы измените сам срез (например, присвоите новый срез или измените длину), эти изменения не повлияют на срез вне функции.

Пример:

func modifySlice(s []int) {
    s[0] = 100 // изменит исходный массив
    s = append(s, 200) // изменит локальный срез, не влияет на внешний
}

func main() {
    arr := []int{1, 2, 3}
    modifySlice(arr)
    fmt.Println(arr) // Выведет [100 2 3]
}

Итого: передача среза без указателя позволяет изменять элементы исходного массива, но не позволяет изменить сам срез (его длину, указатель) вне функции.