Pointers in Go: Difference between revisions
Line 13: | Line 13: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
It can also be implicitly declared using the [[Go_Language#Short_Variable_Declaration|short variable declaration]] inside functions: | It can also be implicitly declared using the [[Go_Language#Short_Variable_Declaration|short variable declaration]] and the [[#The_Referencing_Operator_.26|the referencing operator]] inside functions: | ||
<syntaxhighlight lang='go'> | <syntaxhighlight lang='go'> | ||
a := 10 | a := 10 |
Revision as of 23:44, 28 September 2023
External
Internal
Overview
A pointer is a data type that represents a virtual address in memory, usually the address of a location in memory that is referred by a variable.
A pointer can be declared as such:
var aPtr *int // a pointer to an int
It can also be implicitly declared using the short variable declaration and the the referencing operator inside functions:
a := 10
aPtr := &a
aPtr
is a pointer that contains an address that points to the location in memory associated with the variable a
. Changing the memory value using a syntax that involves the pointer will surface in the value of the variable:
*aPtr = 20
println(a) // will display 20
The pointer data type comes with two operators: &
(the referencing operator), and *
(the dereferencing operator).
Pointer Variable Name
Do we use someNamePtr
or someName
?
Also see:
The Referencing Operator &
The referencing operator (the ampersand operator) returns an address, also known as a "reference", from a variable. &
should be read as "address of ...". It works with variables and also with literals. The syntax &user{name:"Bill"}
where user
is a struct
is legal. The address is represented internally as an instance of type pointer
. The address points to the location in memory where the instance associated with the "referenced" variable is stored.
&<variable-name>
color := "blue"
pointerToColor := &color
println(pointerToColor) // prints "0xc000058720"
The Dereferencing Operator *
The dereferencing operator (star operator) takes a pointer and returns the value in memory the pointer's address points toward. The variable must contain a pointer type instance, otherwise the code will not compile. The value thus exposed can be read or written.
*<pointer-name>
color := "blue"
pointerToColor := &color
println(*pointerToColor) // prints "blue"
*pointerToColor = "red"
println(color) // prints "red"