From 1a20196be574a09f8304362eda1b0981dcda8d3d Mon Sep 17 00:00:00 2001 From: badkaktus Date: Mon, 7 Oct 2019 14:29:50 +0300 Subject: [PATCH] =?UTF-8?q?=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples.txt | 2 +- examples/pointers/pointers.go | 33 ++++++++++++++++----------------- examples/pointers/pointers.sh | 6 +++--- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/examples.txt b/examples.txt index f5fccae..3410b22 100644 --- a/examples.txt +++ b/examples.txt @@ -14,7 +14,7 @@ Switch Функции с переменным числом аргументов (Variadic Functions) Замыкания (Closures) Рекурсия (Recursion) -Pointers +Указатели (Pointers) Structs Methods Interfaces diff --git a/examples/pointers/pointers.go b/examples/pointers/pointers.go index 5574997..4fea148 100644 --- a/examples/pointers/pointers.go +++ b/examples/pointers/pointers.go @@ -1,26 +1,25 @@ -// Go supports pointers, -// allowing you to pass references to values and records -// within your program. +// Go поддерживает указатели, +// позволяя вам передавать ссылки на значения и записи +// в вашей программе. package main import "fmt" -// We'll show how pointers work in contrast to values with -// 2 functions: `zeroval` and `zeroptr`. `zeroval` has an -// `int` parameter, so arguments will be passed to it by -// value. `zeroval` will get a copy of `ival` distinct -// from the one in the calling function. +// Мы покажем, как работают указатели, на примере 2 функций: +// `zeroval` и `zeroptr`. В `zeroval` определен только 1 +// аргумент с типом `int`, который передается по значению. +// `zeroval` получает копию `ival` при вызове функции. func zeroval(ival int) { ival = 0 } -// `zeroptr` in contrast has an `*int` parameter, meaning -// that it takes an `int` pointer. The `*iptr` code in the -// function body then _dereferences_ the pointer from its -// memory address to the current value at that address. -// Assigning a value to a dereferenced pointer changes the -// value at the referenced address. +// `zeroptr` получает в качестве аргумента параметр `*int`, +// который является указателем на `int`. Запись `*iptr` в +// теле функции _разыменовывает_ указатель с его адреса +// памяти на текущее значение по этому адресу. Присвоение +// значения разыменованному указателю изменяет значение +// по указанному адресу. func zeroptr(iptr *int) { *iptr = 0 } @@ -32,11 +31,11 @@ func main() { zeroval(i) fmt.Println("zeroval:", i) - // The `&i` syntax gives the memory address of `i`, - // i.e. a pointer to `i`. + // Запись `&i` получается ссылку на область памяти, в + // которой хранится `i`, т.е. указатель на `i`. zeroptr(&i) fmt.Println("zeroptr:", i) - // Pointers can be printed too. + // Указатели могут быть выведены на экран fmt.Println("pointer:", &i) } diff --git a/examples/pointers/pointers.sh b/examples/pointers/pointers.sh index 11ca0f0..54b4353 100644 --- a/examples/pointers/pointers.sh +++ b/examples/pointers/pointers.sh @@ -1,6 +1,6 @@ -# `zeroval` doesn't change the `i` in `main`, but -# `zeroptr` does because it has a reference to -# the memory address for that variable. +# `zeroval` не изменяет значение `i` в `main`, но +# `zeroptr` изменяет, т.к. в него передается указатель +# на область памяти, в которой хранится переменная. $ go run pointers.go initial: 1 zeroval: 1