int array[3];
array[0] = 0;
array[1] = 1;
array[2] = 2;
array[3] = 999; // out of bounds
int arr1[3] = {0,1,2}; // initialization list
int arr2[] = {0,1,2};  // implicit array w/ init list
int arr3[99] = {0};    // partial array
int arr4[2][3];        // 2D array [row][colm]
initializing arrays, processing arrays, running total, multi dimensional arrays
returnType funcName(parameter, list); // prototype
returnType funcName(parameter, list) {
  // definition
  // return
}
void sayHello() {
  cout << "Hello\n" << endl;
  return();
}
int sum(int a, int b) {
  return(a + b);
}
bool isPositive(int num) {
  if(num > 0)
    return(true);
  //else
  return(false);
}
void increment(int &num, int val=1) {
  num+=val;
} 
void printArr(int arr[], int size) {
  for(int i=0; i<size; i++)
    cout << arr[i] << endl;
}
passing parameters: pass by value, pass by &reference
function overloading
default arguments
boolean functions
passing an array as an argument
int x = 3; int *ptr = &x; 
cout << ptr << endl;
cout << *ptr << endl;
ptr++; ptr = ptr - 1; 
pointer declaration, pointer initialization, dereferencing
a pointer, pointer arithmetic.
int *p = NULL;p = new int;*p = 3;cout << *p << endl;delete p;p=NULL;int *q = NULL;q = new int[2];q[0] = 3;*(q+1) = 4;cout << q[0] << endl;cout << *(q+1) << endl;delete [] q;q=NULL;
struct Square {
  int length;
  int width;
};
...
Square s1;   // one object
s1.length = 2;
s1.width = 2;
Square squares[2]; // static array of objects
Square* dynSqrs = NULL;
try{                        // try
  dynSqrs = new Square[3];  //  to allocate 3 Square objs dyncamically
}catch(bad_alloc) {         // if allocation failed, bad_alloc excpt. caught
  cout << "bad allocation\nexiting program";
  exit(EXIT_FAILURE);       //   close the program
}
if(dynSqrs!=NULL) {         // good habit to check if pointer != NULL
  // process dynSqrs
}