Bird
Raised Fist0
Goprogramming~5 mins

Passing values vs pointers in Go - Quick Revision & Key Differences

Choose your learning style10 modes available
Recall & Review
beginner
What happens when you pass a value to a function in Go?
The function receives a copy of the value. Changes inside the function do not affect the original variable.
Click to reveal answer
beginner
What is a pointer in Go?
A pointer holds the memory address of a variable, allowing functions to access and modify the original variable directly.
Click to reveal answer
intermediate
How do you declare a pointer parameter in a Go function?
Use an asterisk (*) before the type in the function parameter, for example: func f(p *int) {}
Click to reveal answer
intermediate
Why use pointers instead of passing values?
Pointers allow functions to modify the original data and can be more efficient for large data structures because they avoid copying.
Click to reveal answer
beginner
What does the & operator do in Go?
It returns the memory address of a variable, creating a pointer to that variable.
Click to reveal answer
What does passing a value to a function in Go do?
APasses the variable name
BPasses the memory address
CPasses a reference to the value
DPasses a copy of the value
How do you pass a pointer to a function in Go?
AUse the & operator to get the address and * in the parameter
BJust pass the variable name
CUse the * operator to get the address
DUse the & operator in the parameter only
What does the * operator do when used with a pointer in Go?
ACreates a new pointer
BReturns the address of the pointer
CDereferences the pointer to access the value
DCopies the pointer value
Why might you prefer passing a pointer over a value?
ATo make a copy of the variable
BTo modify the original variable inside the function
CTo avoid using memory
DTo prevent changes to the variable
What happens if you change a value inside a function that received a copy?
AThe original variable stays the same
BThe original variable changes
CThe program crashes
DThe copy changes the original automatically
Explain the difference between passing a value and passing a pointer to a function in Go.
Think about what happens inside the function when you change the parameter.
You got /4 concepts.
    Describe how to declare and use a pointer parameter in a Go function.
    Remember the & and * operators and their roles.
    You got /4 concepts.

      Practice

      (1/5)
      1. What happens when you pass a variable to a function by value in Go?
      easy
      A. The function receives a copy; changes inside do not affect the original variable.
      B. The function receives the original variable; changes inside affect the original.
      C. The function cannot modify the variable at all.
      D. The function receives a reference but cannot change the original variable.

      Solution

      1. Step 1: Understand passing by value

        Passing by value means the function gets a copy of the variable, not the original.
      2. Step 2: Effect of changes inside the function

        Changes to the copy do not affect the original variable outside the function.
      3. Final Answer:

        The function receives a copy; changes inside do not affect the original variable. -> Option A
      4. Quick Check:

        Passing by value = copy, no original change [OK]
      Hint: Passing by value means function works on a copy [OK]
      Common Mistakes:
      • Thinking changes inside function affect original variable
      • Confusing pointers with values
      • Assuming function cannot modify any data
      2. Which of the following is the correct way to declare a function parameter as a pointer 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 Go function parameters

        In Go, a pointer parameter is declared by placing * before the type, e.g., *int.
      2. Step 2: Identify correct syntax

        func updateValue(val *int) {} is correct syntax, with * before the type. func updateValue(val int) {} declares a value parameter. func updateValue(&val int) {} and func updateValue(*val int) {} have invalid syntax.
      3. Final Answer:

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

        Pointer parameter syntax = *type [OK]
      Hint: Pointer parameter uses * before type, not variable name [OK]
      Common Mistakes:
      • Putting * before variable name instead of type
      • Using & in parameter declaration
      • Confusing pointer syntax with value parameter
      3. What is the output of this Go program?
      package main
      import "fmt"
      func changeValue(val int) {
          val = 10
      }
      func main() {
          x := 5
          changeValue(x)
          fmt.Println(x)
      }
      medium
      A. 10
      B. 5
      C. 0
      D. Compilation error

      Solution

      1. Step 1: Analyze function parameter passing

        The function changeValue receives x by value, so val is a copy of x.
      2. Step 2: Check if original variable changes

        Inside changeValue, val is set to 10, but this does not affect x in main.
      3. Final Answer:

        5 -> Option B
      4. Quick Check:

        Passing by value means original x stays 5 [OK]
      Hint: Passing by value means original variable unchanged [OK]
      Common Mistakes:
      • Assuming x changes to 10 after function call
      • Confusing pointer and value passing
      • Expecting compilation error due to assignment
      4. Identify the error in this Go code snippet:
      func increment(num *int) {
          num = num + 1
      }
      
      func main() {
          x := 5
          increment(&x)
          fmt.Println(x)
      }
      medium
      A. Missing & operator when calling increment.
      B. x is not initialized before use.
      C. Function parameter should not be a pointer.
      D. Cannot add 1 to a pointer directly; need to dereference first.

      Solution

      1. Step 1: Understand pointer arithmetic in Go

        Go does not support arithmetic on pointers like 'num + 1'. You must dereference the pointer to change the value.
      2. Step 2: Correct way to increment value pointed by pointer

        Use '*num = *num + 1' to increment the value at the pointer address.
      3. Final Answer:

        Cannot add 1 to a pointer directly; need to dereference first. -> Option D
      4. Quick Check:

        Pointer arithmetic invalid; dereference to modify [OK]
      Hint: Use * to access pointer value before arithmetic [OK]
      Common Mistakes:
      • Trying to add directly to pointer variable
      • Forgetting to dereference pointer
      • Confusing pointer and value types
      5. You want to write a function in Go that doubles the value of an integer variable passed to it. Which approach correctly modifies the original variable?
      hard
      A. Return the doubled value and assign it outside the function.
      B. Pass the integer by value and assign double inside the function.
      C. Pass a pointer to the integer and modify the value via dereferencing.
      D. Use a global variable instead of passing parameters.

      Solution

      1. Step 1: Understand how to modify original variable

        Passing by value copies the variable, so changes inside function won't affect original.
      2. Step 2: Use pointer to modify original variable

        Passing a pointer allows the function to access and change the original variable's value via dereferencing.
      3. Step 3: Consider alternatives

        Returning doubled value requires assignment outside; using global variables is bad practice.
      4. Final Answer:

        Pass a pointer to the integer and modify the value via dereferencing. -> Option C
      5. Quick Check:

        Pointer passing modifies original variable [OK]
      Hint: Use pointer to change original variable inside function [OK]
      Common Mistakes:
      • Assuming passing by value changes original variable
      • Relying on return value without assignment
      • Using global variables unnecessarily
      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