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 = someNumber + 1;
}
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