CS 211:
Introduction to Computer Programming II
Instructor: Brian M. Dennis
Teaching Assistants:
Tom Lechner, Bin Lin
http://www.cs.northwestern.edu/~bmd/cs211/

Pass by value
void swap(int x, int y) {
int old_x = x;
x = y;
y = old_x;
}
int main() {
int x = 10, y = 20;
swap(x, y);
cout << "x: " << x;
cout << " y: " << y;
cout << "\n";
return 1;
}

Pass by reference
void swap(int& x, int &y) {
int old_x = x;
x = y;
y = old_x;
}
int main() {
int x = 10, y = 20;
swap(x, y);
cout << "x: " << x;
cout << " y: " << y;
cout << "\n";
return 1;
}

Pass by value reference
int* swap(int* x_ptr, int *y_ptr) {
int* z_ptr, *z;
int old_x = *x_ptr;
*x_ptr = *y_ptr;
*y_ptr = old_x;
return y_ptr;
}
int main() {
int x = 10, y = 20;
swap(&x, &y);
cout << "x: " << x;
cout << " y: " << y;
cout << "\n";
return 1;
}

Slide 5

Memory
Array of bytes
Byte == 8 bits
Often written in Hex, base 16
Every variable
Some storage in memory
A type
A size
ints = 4 bytes
floats = 4 bytes
doubles = 8 bytes
char = 1 byte
pointer (of any type) = 4 bytes

Increment shorthands
int main() {
int x = 100;
int z = 3;
x = x + 1;
// The following only work on lvalues
x += 1; // Add 1 to x
x += z, x += z * z; // Add 3, then add 9
x++; // Increment x, ret oldx
++x; // Increment x, ret newx
}

for statement
int fib_pure_iter(int n) {
  int a = 1;
  int b = 0;
int old_a = 1;
  for (int i = 0; i < n; i += 1)
    {
      old_a = a;
      a = a + b;
      b = old_a;
    }
  return b;
}

for statement
int fib_pure_iter(int n) {
  int a = 1;
  int b = 0;
int old_a = 1;
  for (int i = 0; i < n; i++)
    {
      old_a = a;
      a = a + b;
      b = old_a;
    }
  return b;
}

Decrement shorthands
int main() {
int x = 100;
int z = 4;
x = x - 1;
// The following only work on lvalues
x -= 1; // Subtract 1 from x
x -= z, x -= z * z; // Sub 4, then sub 16
x--; // Decrement x, ret oldx
--x; // Decrement x, ret newx
}

while statement
int fib_pure_iter(int n) {
  int a = 1;
  int b = 0;
  int old_a = 1;
while (0 < n--) {
  old_a = a;
    a = a + b;
    b = old_a;
  }
  return b;
}

Arrays
// Arrays: homogeneous, sequential,
// indexed, contiguous storage, zero based
int main() {
int int_array[10]; // Array of 10 integers
   // 40 bytes of storage
double double_array[5]; // Array of 5 doubles
  // 20 bytes of storage
char char_array[10]; // Array of 10 chars
     // 10 bytes of storage
}

Arrays: access
#include <iostream>
using namespace std;
int fib(int n);
int main() {
int fib_vals[10];
for(int i = 0; i < 10; i++) {
fib_vals[i] = fib(i);
}
int j = 10;
while(j--) {
cout << "Fib: " << j << " = "
     << fib_vals[j] << "\n";
}
}

Arrays: access
#include <iostream>
using namespace std;
int main() {
char hw = "Hello, World";
for (int j = 0; hw[j]; j++) {
cout << hw[j];
}
cout << "\n";
for (int k = 12; 0 <= k; k--) {
cout << hw[k];
}
cut << "\n";
}

Help us help you
Bring the source code
Trim to smallest broken example
What are you trying to get done?
How is your code supposed to be doing it?
How did you run your code?
What did you expect?
What did you get?

That’s a Wrap
Takeaway
Pointer basics
Array basics
Reading
4.1 – 4.4
5.1 – 5.4