cpp

Способы передачи параметров в функцию

Как вы уже знаете, после названия функции, внутри круглых скобок, указывается название параметра и его тип. Если параметров несколько, то они перечисляются через запятую. Если функция не принимает параметров, то указываются пустые круглые скобки. Каждый параметр является локальной переменной. Эта переменная создается при вызове функции, а после выхода из функции она удаляется. Таким образом, локальная переменная видна только внутри функции и ее значение между вызовами не сохраняется. Если название локальной переменной совпадает с названием глобальной переменной, то все операции будут производиться с локальной переменной, а значение глобальной не изменится.

При вызове функции указывается название функции, после которого внутри круглых скобок передаются значения. Количество и тип параметров в определении функции должны совпадать с количеством и типом параметров при вызове. Переданные значения присваиваются переменным, расположенным в той же позиции в определении функции. Так при вызове функции Sum(10, 20) (формат Sum(x int, y int) int) переменной x будет присвоено значение 10, а переменной y — значение 20. Если функция не принимает параметров, то при вызове указываются только круглые скобки.

По умолчанию в функцию передается копия значения переменной, а не ссылка на переменную. Таким образом, изменение значения внутри функции не затронет значение исходной переменной. Пример передачи параметра по значению приведен в листинге 10.5.

Листинг 10.5. Передача параметра по значению

package main

import "fmt"

func main() {
   x := 10
   test(x)
   fmt.Println("x =", x) // x = 10
}
func test(x int) {
   x = x + 20 // Значение нигде не сохраняется!
}

Передача копии значения для чисел является хорошим решением, но при использовании массивов и объектов, а также при необходимости изменить значение исходной переменной, лучше применять передачу указателя. Для этого при вызове функции перед названием переменной указывается оператор & (взятие адреса), а в определении функции объявляется указатель. В этом случае в функцию передается не значение переменной, а ее адрес. Внутри функции вместо переменной используется указатель. Пример передачи указателя приведен в листинге 10.6.

Листинг 10.6. Передача указателя в функцию

package main

import "fmt"

func main() {
   x := 10
   test(&x)       // Передаем адрес
   fmt.Println(x) // 30, а не 10
}
func test(px *int) {
   *px = *px + 20 // Изменяется значение переменной x
}

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp