Fundamental Programming Function Parameters Fundamental Programming 310201 1

  • Slides: 49
Download presentation
Fundamental Programming Function Parameters Fundamental Programming 310201 1

Fundamental Programming Function Parameters Fundamental Programming 310201 1

Memory Management · in last lecture you leant about local variables · unless authorised,

Memory Management · in last lecture you leant about local variables · unless authorised, other functions cannot change the value of a local variable · authority to change a variable is given when we call a function with an output variable · in this class we explore how input and output variables work - this is an important topic · let’s start with input variables… Fundamental Programming 310201 2

Input Variables · when a function with an input variable is called, the value

Input Variables · when a function with an input variable is called, the value of the variable in the call is copied into the function’s local variable Fundamental Programming 310201 3

#include <iostream> void Sub. Function(int Local. To. Sub); note: here, name of variable in

#include <iostream> void Sub. Function(int Local. To. Sub); note: here, name of variable in call does not match name of input variable in declaration void main(void) { int Local. To. Main = 1; Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } void Sub. Function(int Local. To. Sub) { Local. To. Sub = 2; } Sub. Function assigns a value to Local. To. Sub – it has no effect on value of Local. To. Main Fundamental Programming 310201 4

Input Variables · value of variable in call is copied to local variable declared

Input Variables · value of variable in call is copied to local variable declared in the function header… void main(void) Local. To. Main { : Sub. Function(Local. To. Main); : } void Sub. Function(int Local. To. Sub) { : Local. To. Sub } main’s variable function call function header Sub. Function’s variable Fundamental Programming 310201 5

#include <iostream> void Sub. Function(int Local. To. Sub); void main(void) { int Local. To.

#include <iostream> void Sub. Function(int Local. To. Sub); void main(void) { int Local. To. Main = 1; Local. To. Main: Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } void Sub. Function(int Local. To. Sub) { Local. To. Sub = 2; } Local. To. Sub: Fundamental Programming 310201 6

#include <iostream> void Sub. Function(int Local. To. Sub); main(void) => void { } int

#include <iostream> void Sub. Function(int Local. To. Sub); main(void) => void { } int Local. To. Main = 1; Local. To. Main: Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; void Sub. Function(int Local. To. Sub) { Local. To. Sub = 2; } ? Local. To. Sub: ? Fundamental Programming 310201 7

#include <iostream> void Sub. Function(int Local. To. Sub); => void main(void) { int Local.

#include <iostream> void Sub. Function(int Local. To. Sub); => void main(void) { int Local. To. Main = 1; Local. To. Main: Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } void Sub. Function(int Local. To. Sub) { Local. To. Sub = 2; } ? Local. To. Sub: ? Fundamental Programming 310201 8

#include <iostream> void Sub. Function(int Local. To. Sub); => void main(void) { int Local.

#include <iostream> void Sub. Function(int Local. To. Sub); => void main(void) { int Local. To. Main = 1; Local. To. Main: Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } void Sub. Function(int Local. To. Sub) { Local. To. Sub = 2; } ? Local. To. Sub: ? Fundamental Programming 310201 9

#include <iostream> void Sub. Function(int Local. To. Sub); => void main(void) { int Local.

#include <iostream> void Sub. Function(int Local. To. Sub); => void main(void) { int Local. To. Main = 1; Local. To. Main: Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } void Sub. Function(int Local. To. Sub) { Local. To. Sub = 2; } 1 Local. To. Sub: ? Fundamental Programming 310201 10

#include <iostream> void Sub. Function(int Local. To. Sub); => void main(void) { int Local.

#include <iostream> void Sub. Function(int Local. To. Sub); => void main(void) { int Local. To. Main = 1; Local. To. Main: Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } void Sub. Function(int Local. To. Sub) { Local. To. Sub = 2; } 1 c o p y Local. To. Sub: 1 Fundamental Programming 310201 11

#include <iostream> void Sub. Function(int Local. To. Sub); void main(void) { int Local. To.

#include <iostream> void Sub. Function(int Local. To. Sub); void main(void) { int Local. To. Main = 1; Local. To. Main: Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } => void Sub. Function(int Local. To. Sub) { Local. To. Sub = 2; } 1 Local. To. Sub: 1 Fundamental Programming 310201 12

#include <iostream> void Sub. Function(int Local. To. Sub); void main(void) { int Local. To.

#include <iostream> void Sub. Function(int Local. To. Sub); void main(void) { int Local. To. Main = 1; Local. To. Main: Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } => void Sub. Function(int Local. To. Sub) { Local. To. Sub = 2; } 1 Local. To. Sub: 1 Fundamental Programming 310201 13

#include <iostream> void Sub. Function(int Local. To. Sub); void main(void) { int Local. To.

#include <iostream> void Sub. Function(int Local. To. Sub); void main(void) { int Local. To. Main = 1; Local. To. Main: Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } => void Sub. Function(int Local. To. Sub) { Local. To. Sub = 2; } 1 Local. To. Sub: 1 Fundamental Programming 310201 14

#include <iostream> void Sub. Function(int Local. To. Sub); void main(void) { int Local. To.

#include <iostream> void Sub. Function(int Local. To. Sub); void main(void) { int Local. To. Main = 1; Local. To. Main: Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } void Sub. Function(int Local. To. Sub) { Local. To. Sub = 2; } => 1 Local. To. Sub: 2 Fundamental Programming 310201 15

#include <iostream. h> void Sub. Function(int Local. To. Sub); => void main(void) { int

#include <iostream. h> void Sub. Function(int Local. To. Sub); => void main(void) { int Local. To. Main = 1; Local. To. Main: Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } void Sub. Function(int Local. To. Sub) { Local. To. Sub = 2; } 1 Local. To. Sub: 2 Fundamental Programming 310201 16

Example dialog Local. To. Main after call is: Fundamental Programming 310201 17

Example dialog Local. To. Main after call is: Fundamental Programming 310201 17

#include <iostream> void Sub. Function(int Local. To. Sub); => void main(void) { int Local.

#include <iostream> void Sub. Function(int Local. To. Sub); => void main(void) { int Local. To. Main = 1; Local. To. Main: Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } void Sub. Function(int Local. To. Sub) { Local. To. Sub = 2; } 1 Local. To. Sub: 2 Fundamental Programming 310201 18

Example dialog Local. To. Main after call is: 1 Fundamental Programming 310201 19

Example dialog Local. To. Main after call is: 1 Fundamental Programming 310201 19

#include <iostream> void Sub. Function(int Local. To. Sub); => void main(void) { int Local.

#include <iostream> void Sub. Function(int Local. To. Sub); => void main(void) { int Local. To. Main = 1; Local. To. Main: Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } void Sub. Function(int Local. To. Sub) { Local. To. Sub = 2; } 1 Local. To. Sub: 2 Fundamental Programming 310201 20

Memory Management · when a function with an input variable is called, the value

Memory Management · when a function with an input variable is called, the value of the variable in the call is copied into the function’s local variable · two functions can have a local variable with the same name · at the end of the following program, main’s Local. Variable holds 1, and Sub. Function’s Local. Variable holds 2 Fundamental Programming 310201 21

#include <iostream> void Sub. Function(int Local. Variable); void main(void) { int Local. Variable =

#include <iostream> void Sub. Function(int Local. Variable); void main(void) { int Local. Variable = 1; Local. Variable: Sub. Function(Local. Variable); cout << "Local. Variable after call is: "; cout << Local. Variable; } void Sub. Function(int Local. Variable) { Local. Variable = 2; } Local. Variable: note: these are two quite different variables – they refer to different memory locations Fundamental Programming 310201 22

#include <iostream> void Sub. Function(int Local. Variable); => void main(void) { int Local. Variable

#include <iostream> void Sub. Function(int Local. Variable); => void main(void) { int Local. Variable = 1; Local. Variable: Sub. Function(Local. Variable); cout << "Local. Variable after call is: "; cout << Local. Variable; } 1 void Sub. Function(int Local. Variable) { Local. Variable = 2; } Local. Variable: 2 note: at the end of the program, these two variables hold different values Fundamental Programming 310201 23

Activity · the design for a program to determine the highest and second highest

Activity · the design for a program to determine the highest and second highest of two integers is provided in the handout · the required behavior is shown below: Enter an integer ==> 3 Enter another integer ==> 4 Highest integer is: 4 Second highest integer is: 3 Fundamental Programming 310201 24

Activity · as provided, the program will not produce this output? · activities: ·

Activity · as provided, the program will not produce this output? · activities: · what output will the program produce? · what is the final value of the following variables: Int 1 Int 2 Local Fundamental Programming 310201 25

Activity Break Fundamental Programming 310201 26

Activity Break Fundamental Programming 310201 26

Activity Feedback · what output will the program produce? Enter an integer ==> 3

Activity Feedback · what output will the program produce? Enter an integer ==> 3 Enter another integer ==> 4 Highest integer is: 3 Second highest integer is: 3 · final value of variables is a trick question: Int 1 (in main) : 3 Int 1 (in Swap) : 4 Int 2 : 3 Local : 3 Fundamental Programming 310201 27

Output Variables · the authority to use a variable is given when a function

Output Variables · the authority to use a variable is given when a function with an output variable is called · when you call a function with an input variable, the value of the variable in the call is copied into a local variable in the function · when you call a function with an output variable, no data is copied… · instead, you grant the function permission to use the variable in the call Fundamental Programming 310201 28

#include <iostream> void Sub. Function(int &Parameter); note: similar to program used before; difference is

#include <iostream> void Sub. Function(int &Parameter); note: similar to program used before; difference is that Sub. Function’s parameter is for output void main(void) { int Local. To. Main = 1; Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } Local. To. Main is 2 after void Sub. Function(int &Parameter) call to Sub. Function { Parameter = 2; } Sub. Function assigns a value to Parameter – effect is to change value of Local. To. Main Fundamental Programming 310201 29

Output Variables · when you call a function with an output variable, no data

Output Variables · when you call a function with an output variable, no data is copied - a local variable is not created in the function · instead, you grant the function permission to use the variable in the function call… · variables provide us with a convenient way to refer to memory locations · a variable references a memory location · so, the variable in a function call serve as a reference to a memory location of interest Fundamental Programming 310201 30

Output Variables · when you call a function with an output variable, no data

Output Variables · when you call a function with an output variable, no data is copied - a local variable is not created in the function the output variable in a function header provides a the · instead, you grant the function permission to use variable in the function call… reference to the same · variables provide us with a convenient way to refer memory location to memory locations · a variable references a memory location – the memory location of · so, the variable in a function call serve as a reference a memory location of interest the tovariable in the call Fundamental Programming 310201 31

#include <iostream> void Sub. Function(int &Parameter); Local. To. Main is a name we use

#include <iostream> void Sub. Function(int &Parameter); Local. To. Main is a name we use to refer to a memory location void main(void) { int Local. To. Main = 1; Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } void Sub. Function(int &Parameter ) { Parameter = 2; } Parameter serves as a reference to the same memory location Fundamental Programming 310201 32

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main =

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main = 1; Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } void Sub. Function(int &Parameter ) { Parameter = 2; } Fundamental Programming 310201 33

#include <iostream> void Sub. Function(int &Parameter); main(void) => void { } int Local. To.

#include <iostream> void Sub. Function(int &Parameter); main(void) => void { } int Local. To. Main = 1; Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; void Sub. Function(int &Parameter ) { Parameter = 2; } Fundamental Programming 310201 34

#include <iostream> void Sub. Function(int &Parameter); void main(void) { => int Local. To. Main

#include <iostream> void Sub. Function(int &Parameter); void main(void) { => int Local. To. Main = 1; Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } void Sub. Function(int &Parameter ) { Parameter = 2; } Fundamental Programming 310201 35

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main =

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main = 1; => Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } void Sub. Function(int &Parameter ) { Parameter = 2; } Fundamental Programming 310201 36

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main =

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main = 1; Sub. Function(Local. To. Main); => cout << "Local. To. Main after call is: "; cout << Local. To. Main; } 1 void Sub. Function(int &Parameter ) { Parameter = 2; } Fundamental Programming 310201 37

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main =

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main = 1; Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } 1 void Sub. Function(int &Parameter ) => { Parameter = 2; } Fundamental Programming 310201 38

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main =

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main = 1; Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } 1 void Sub. Function(int &Parameter ) { => } Parameter = 2; Fundamental Programming 310201 39

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main =

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main = 1; Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } => 1 void Sub. Function(int &Parameter ) { Parameter = 2; } Fundamental Programming 310201 40

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main =

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main = 1; Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } 2 void Sub. Function(int &Parameter ) { Parameter = 2; } => Fundamental Programming 310201 41

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main =

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main = 1; Sub. Function(Local. To. Main); => cout << "Local. To. Main after call is: "; cout << Local. To. Main; } 2 void Sub. Function(int &Parameter ) { Parameter = 2; } Fundamental Programming 310201 42

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main =

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main = 1; Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; => } 2 void Sub. Function(int &Parameter ) { Parameter = 2; } Fundamental Programming 310201 43

Example dialog Local. To. Main after call is: Fundamental Programming 310201 44

Example dialog Local. To. Main after call is: Fundamental Programming 310201 44

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main =

#include <iostream> void Sub. Function(int &Parameter); void main(void) { int Local. To. Main = 1; Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; => } 2 void Sub. Function(int &Parameter ) { Parameter = 2; } Fundamental Programming 310201 45

Example dialog Local. To. Main after call is: 2 Fundamental Programming 310201 46

Example dialog Local. To. Main after call is: 2 Fundamental Programming 310201 46

#include <iostream> void Sub. Function(int &Parameter); => void main(void) { int Local. To. Main

#include <iostream> void Sub. Function(int &Parameter); => void main(void) { int Local. To. Main = 1; Sub. Function(Local. To. Main); cout << "Local. To. Main after call is: "; cout << Local. To. Main; } 2 void Sub. Function(int &Parameter ) { Parameter = 2; } Fundamental Programming 310201 47

Reference Parameters · parameters marked for input only are called value parameters – a

Reference Parameters · parameters marked for input only are called value parameters – a value is copied into a local variable · parameters marked for output are called reference parameters – they provide a reference to the memory location of the variable in the function call : call Sub. Function( Local. Variable ) : ? void Sub. Function( int &Parameter ) {…} Fundamental Programming 310201 48

Summary · in this lecture we’ve examined an important topic – value and reference

Summary · in this lecture we’ve examined an important topic – value and reference parameters · it may take a while for you to become comfortable with these ideas · we will work on these ideas in tutes and labs to raise your comfort level · in the next lecture we will deal with the outstanding issue of the void in: void Get. Nearest. Prime(int Number, int &Nearest. Prime); void Get. Yor. NReply(char &Reply); Fundamental Programming 310201 49