Page 80, Exercise 2

 #include <stdio.h>
#include <stdlib.h>
int** make2dArray(int, int);
void add(int **, int**, int**, int,int);
void print(int**, int, int);
#define MALLOC(p,s) \
  if (!((p) = malloc(s))) {\
     fprintf(stderr, "Insufficient memory"); \
     exit(EXIT_FAILURE); \
   }

int main(){
int i,j,x;
int **a, **b, **c;
a = make2dArray(2,3);
b = make2dArray(2,3);
c = make2dArray(2,3);
x = 1;
for (i = 0; i<2; i++)
  for (j = 0; j < 3; j++){
     a[i][j] = x;
	 b[i][j] = x+1;
	 x++;
}
print(a,2,3);
printf("\nb: \n");
print(b,2,3);
add(a,b,c,2,3);
printf("\nc:\n");
print(c, 2,3);
}

int** make2dArray(int rows, int cols)
{/*create a 2-d array rows x cols */
   int **x, i;
   MALLOC(x,rows*sizeof(*x)); /*get memory  for row pointers*/
   for(i = 0; i < rows; i++){
      MALLOC(x[i], cols * sizeof(**x)); /*get memory for col pointers*/
	  *x[i]=0; /*** SET each column in each row to 0 */
	}
	return x;
}

void print(int **a, int rows, int cols)
{
   int i,j;
   for (i = 0; i