By Value or By Reference

The second method of transferring information to a function is to pass it By Reference. This means that a pointer or reference to where the data is stored in memory is passed to the function and not a copy of the data. Since a pointer to where the data exists has been passed, if you actually change the value of the data in the function, the actual values of the data in the main program where the function was called from will also be changed. This can be very powerful but also very dangerous. Be careful passing parameters By Reference, you might mistakenly change a value when that is not what you or someone else is expecting. The rule of thumb is that unless there is a really good reason to pass something By Reference, you never do and you always pass parameters By Value (even though it takes up more space in memory).

Each language has its own syntax on how to declare you are going to accept a value by reference when you are declaring a function here is an example:

Code for Function passing a value By Reference

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Copyright (c) 2020 Mr. Coxall All rights reserved.
//
// Created by: Mr. Coxall
// Created on: Sep 2020
// This program uses a function by reference

#include <stdio.h>

void addOne(int *someNumber) {
    // this function adds one by reference
    (*someNumber)++;
}

int main() {
    // this function uses a function by reference
    int someNumber;

    // input
    printf("Enter a number: ");
    scanf("%d", &someNumber);

    // process
    addOne(&someNumber);

    // output
    printf("The number plus one is: %d \n", someNumber);

    printf("\nDone.\n");
    return 0;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Copyright (c) 2020 Mr. Coxall All rights reserved.
//
// Created by: Mr. Coxall
// Created on: Sep 2020
// This program uses a function by reference

#include <iostream>

void addOne(int &someNumber) {
    // this function adds one, by reference
    someNumber = someNumber + 1;
}

int main() {
    // this function uses a function by reference
    int someNumber;

    // input
    std::cout << "Enter a number: ";
    std::cin >> someNumber;

    // process
    addOne(someNumber);

    // output
    std::cout << "The number plus one is: " << someNumber << std::endl;

    std::cout << "\nDone." << std::endl;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/* Created by: Mr. Coxall
 * Created on: Sep 2020
 * This program uses a function by reference
*/

using System;

/*
 * The Program class
*/
class Program {
    static void AddOne(ref int someNumber) {
        // this function adds one to the parameter, by reference
        someNumber = someNumber + 1;
    }

    static void Main() {
        // this function uses a function by reference
        int someNumber;

        // input
        Console.Write("Enter a number: ");
        someNumber = Convert.ToInt32(Console.ReadLine());

        // process
        AddOne(ref someNumber);

        // output
        Console.WriteLine("The number plus one is: {0}", someNumber);

        Console.WriteLine("\nDone.");
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
 * Created by: Mr. Coxall
 * Created on: Sep 2020
 * This program uses a function by reference
 */

package main

import "fmt"

func addOne(someVariable *int) {
	// this function adds one to the variable passed in, by reference
	*someVariable = *someVariable + 1
}

func main() {
	// this function uses a function by reference
	var someNumber int

	// input
	fmt.Print("Enter a number: ")
	fmt.Scan(&someNumber)

	// Process
	addOne(&someNumber)

	// Output
	fmt.Println("The number plus one is:", someNumber)

	fmt.Println("\nDone.")
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
 * This program uses a function by reference
 *
 * @author  Mr Coxall
 * @version 1.0
 * @since   2020-09-01
 */

import java.util.Scanner;

public class Main {

  /**
   * This function adds one to a number, by reference.
   * @param someNumber
   */
  public static void addOne(int[] someNumber) {
    someNumber[0] = someNumber[0] + 1;
  }

  public static void main(String[] args) {
    // this function uses a function by reference

    // In Java, you can pass a variable by reference by using an array
    int[] someVariable = new int[1];

    // input
    Scanner input = new Scanner(System.in);
    System.out.print("Enter a number: ");
    someVariable[0] = input.nextInt();

    // process
    addOne(someVariable);

    // output
    System.out.println("The number plus one is: " + someVariable[0]);

    System.out.println("\nDone.");
  }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*
Created by: Mr. Coxall
Created on: Sep 2020
This module uses a function by reference
*/

function addOne(someVariable) {
    // The addOne() function adds 1, by reference
    someVariable[0] = someVariable[0] + 1;
}
  
const prompt = require('prompt-sync')()
// In JavaScript, you can pass a variable by reference by using an array  
const someNumber = [];

// Input
const tempVar = parseInt(prompt("Enter a number: "));
someNumber.push(tempVar);

// Process
addOne(someNumber);

// Output
console.log(`The number plus one is: ` + someNumber[0]);

console.log("\nDone.");
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/env python3
"""
Created by: Mr. Coxall
Created on: Sep 2020
This module uses a function by reference
"""


def add_one(someVariable: List[int]) -> None:
    """The add_one() function adds 1, by reference, returns str."""
    # in python the only way to pass by reference is to pass the whole list

    someVariable[0] = someVariable[0] + 1


def main() -> None:
    """The main() this function gets a number and calls the add_one function, returns None."""
    someNumber = []

    # input
    temp_var = int(input("Enter a number: "))
    someNumber.append(temp_var)

    # process
    add_one(someNumber)

    # output
    print(f"The number plus one is: {someNumber[0]}")

    print("\nDone.")


if __name__ == "__main__":
    main()

Example Output

Code example output