Как передать указатель на массив в функцию golang?

Пользователь

от roma , в категории: Golang , 3 года назад

Как передать указатель на массив в функцию golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от dmitrypro77 , 3 года назад

@roma Используйте & символ чтобы передать указатель на массив в функцию на Golang, в этом примере Вы можете видеть что изменяем массив(переворачиваем) без возвращения значения из функции:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main

import (
   "fmt"
   "reflect"
)

func main() {
   numbers := []int{1, 2, 3}

   reverseArray(&numbers)
   // Вывод: [3 2 1]
   fmt.Println(numbers)
}

func reverseArray(arr *[]int) {
   size := reflect.ValueOf(*arr).Len()
   swap := reflect.Swapper(*arr)
   for i, j := 0, size-1; i < j; i, j = i+1, j-1 {
      swap(i, j)
   }
}
Всегда открыт для интересных проектов. Ссылки на мои соц. сети в профиле.

Пользователь

от marc_zboncak , 2 года назад

@roma 

В Go указатель на массив передается похожим образом, как и в C. Для этого используется синтаксис указателей и указателей на массивы.


Вот пример, который демонстрирует, как передать указатель на массив в функцию:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
package main

import "fmt"

// Функция, которая принимает указатель на массив int и его размер
func printArray(array *[5]int, size int) {
    for i := 0; i < size; i++ {
        fmt.Printf("%d ", (*array)[i])
    }
}

func main() {
    // Создаем массив и передаем его указатель в функцию
    array := [5]int{1, 2, 3, 4, 5}
    printArray(&array, len(array))
}


В этом примере функция printArray принимает указатель на массив array и его размер size. В функции мы используем указатель на массив, чтобы вывести каждый элемент массива.


В функции main мы создаем массив array и передаем его указатель и размер функции printArray.


Обратите внимание, что в функции printArray мы используем (*array)[i], чтобы получить доступ к элементу массива по индексу i. Также важно помнить, что в Go массивы передаются по значению, а не по ссылке. Поэтому в функции мы работаем с указателем на массив, чтобы иметь возможность изменять его содержимое.