Skip to main content

How To Think Like a Computer Scientist C++ Edition The Pretext Interactive Version

Section 8.6 Call by value

When you pass a structure as an argument, remember that the argument and the parameter are not the same variable. Instead, there are two variables (one in the caller and one in the callee) that have the same value, at least initially. For example, when we call printPoint, the stack diagram looks like this:
described in detail following the image
"Two boxes, one for ’main’ and one for ’printPoint’. ’main’ has a variable blank and ’printPoint’ has a variable ’p’. Both variables have ’x:3, y:4’"
Figure 8.6.1. Stack Diagram for structure
If printPoint happened to change one of the instance variables of p, it would have no effect on blank. Of course, there is no reason for printPoint to modify its parameter, so this isolation between the two functions is appropriate.
This kind of parameter-passing is called “pass by value” because it is the value of the structure (or other type) that gets passed to the function.
Listing 8.6.2. Take a look at this active code. Notice from the output of the code below how the function addTwo changes the instance variables, but not on blank itself.

Checkpoint 8.6.1.

What will print?
int addTwo(int x) {
  cout << x << " ";
  x = x + 2;
  cout << x << " ";
  return x;
}

int main() {
  int num = 2;
  addTwo(num);
  cout << num << endl;
}
  • 2 4
  • Take a look at exactly what is being outputted.
  • 2 4 2
  • Correct!
  • 4 4 2
  • Take a look at exactly what is being outputted.
  • 2 4 4
  • Remember the rules of pass by value.

Checkpoint 8.6.2.

What will print?
struct Point {
  int x, y;
};

void timesTwo(Point p) {
  p.x = p.x * 2;
  p.y = p.y * 2;
  cout << "(" << p.x << ", " << p.y << ")";
}

int main() {
  Point blank = { 3, 4 };
  timesTwo(blank);
  cout << ", " << blank.x << endl;
}
  • (6, 8), 3
  • Correct!
  • (6, 8), 6
  • Remember the rules of pass by value.
  • (68),3
  • Take a look at exactly what is being outputted.
  • 68, 6
  • Take a look at exactly what is being outputted.
You have attempted 1 of 3 activities on this page.