Bird
Raised Fist0
Goprogramming~5 mins

Pointer behavior in functions in Go

Choose your learning style10 modes available
Introduction

Pointers let you share and change data directly inside functions without copying it. This helps save memory and lets functions update values outside their own space.

When you want a function to change a variable from outside its own code.
When you want to avoid copying large data to keep your program fast.
When you need to share the same data between different parts of your program.
When you want to return multiple values by changing variables passed to a function.
Syntax
Go
func functionName(param *Type) {
    // use *param to access or change the value
}

The * before a type means the parameter is a pointer to that type.

Use *param inside the function to get or set the actual value.

Examples
This function takes a pointer to an int and sets the value it points to 10.
Go
func updateValue(x *int) {
    *x = 10
}
This function prints the value pointed to by the pointer.
Go
func printValue(x *int) {
    fmt.Println(*x)
}
Sample Program

This program shows how a function can change a variable's value using a pointer. We pass the address of number to changeNumber. Inside the function, the value at that address is changed to 42. The change is visible outside the function.

Go
package main

import "fmt"

func changeNumber(num *int) {
    *num = 42
}

func main() {
    number := 5
    fmt.Println("Before:", number)
    changeNumber(&number)
    fmt.Println("After:", number)
}
OutputSuccess
Important Notes

Passing a pointer means the function can change the original variable.

Use & to get the address of a variable when calling the function.

Use * inside the function to access or modify the value the pointer points to.

Summary

Pointers let functions change variables outside their own scope.

Use & to send a variable's address, and * to access or change the value inside the function.

This helps save memory and allows direct updates to data.

Practice

(1/5)
1. What does passing a pointer to a function in Go allow you to do?
easy
A. Automatically convert the variable to a string
B. Create a copy of the variable that cannot be changed
C. Modify the original variable's value inside the function
D. Prevent the function from accessing the variable

Solution

  1. Step 1: Understand pointer passing

    Passing a pointer sends the address of the variable, not a copy.
  2. Step 2: Effect on original variable

    Inside the function, using the pointer lets you change the original variable's value.
  3. Final Answer:

    Modify the original variable's value inside the function -> Option C
  4. Quick Check:

    Pointer lets function change original variable [OK]
Hint: Pointers let functions change original variables directly [OK]
Common Mistakes:
  • Thinking pointers create copies instead of referencing original
  • Confusing pointer with value passing
  • Assuming pointers prevent modification
2. Which of the following is the correct way to declare a function that takes a pointer to an int in Go?
easy
A. func updateValue(val *int) {}
B. func updateValue(val int) {}
C. func updateValue(*val int) {}
D. func updateValue(&val int) {}

Solution

  1. Step 1: Recall pointer syntax in function parameters

    In Go, a pointer parameter is declared with * before the type, like *int.
  2. Step 2: Check each option

    func updateValue(val *int) {} correctly uses *int as the parameter type.
  3. Final Answer:

    func updateValue(val *int) {} -> Option A
  4. Quick Check:

    Pointer parameter syntax = *type [OK]
Hint: Pointer parameters use * before type, not variable name [OK]
Common Mistakes:
  • Placing * before variable name instead of type
  • Using & in parameter declaration
  • Omitting * for pointer type
3. What will be the output of this Go program?
package main
import "fmt"
func change(val *int) {
    *val = 10
}
func main() {
    x := 5
    change(&x)
    fmt.Println(x)
}
medium
A. 5
B. 10
C. 0
D. Compilation error

Solution

  1. Step 1: Understand pointer usage in change function

    The function receives a pointer to x and sets the value at that address to 10.
  2. Step 2: Trace main function execution

    x starts as 5, change(&x) updates x to 10, then fmt.Println prints x.
  3. Final Answer:

    10 -> Option B
  4. Quick Check:

    Pointer lets function update x to 10 [OK]
Hint: Pointer lets function change original variable value [OK]
Common Mistakes:
  • Expecting original value 5 to print
  • Confusing pointer dereference syntax
  • Thinking function works without & operator
4. Identify the error in this Go code snippet:
func update(val *int) {
    val = 20
}

func main() {
    x := 5
    update(&x)
    fmt.Println(x)
}
medium
A. Cannot assign int to pointer variable directly
B. Missing & operator when calling update
C. Function update should return int
D. x is not initialized

Solution

  1. Step 1: Analyze assignment inside update function

    val is a pointer to int, but val = 20 tries to assign int to pointer variable, which is invalid.
  2. Step 2: Correct way to change value via pointer

    Use *val = 20 to assign 20 to the value pointed by val.
  3. Final Answer:

    Cannot assign int to pointer variable directly -> Option A
  4. Quick Check:

    Assign to *val, not val [OK]
Hint: Assign to *pointer, not pointer variable itself [OK]
Common Mistakes:
  • Assigning value directly to pointer variable
  • Forgetting to dereference pointer
  • Confusing pointer and value types
5. Given this Go code, what will be the output?
package main
import "fmt"
func swap(a, b *int) {
    *a, *b = *b, *a
}
func main() {
    x, y := 1, 2
    swap(&x, &y)
    fmt.Println(x, y)
}
hard
A. Compilation error
B. 1 2
C. 0 0
D. 2 1

Solution

  1. Step 1: Understand swap function behavior

    swap takes pointers to two ints and swaps their values using pointer dereferencing.
  2. Step 2: Trace main function execution

    x=1, y=2 initially; swap(&x, &y) swaps values, so x becomes 2 and y becomes 1.
  3. Final Answer:

    2 1 -> Option D
  4. Quick Check:

    Pointer swap exchanges values correctly [OK]
Hint: Swap values by dereferencing pointers [OK]
Common Mistakes:
  • Expecting original order after swap
  • Confusing pointer addresses with values
  • Not using * to dereference pointers
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard