A two-dimensional array is a grid of rows and columns. To create one in the run-time stack, use something like
double grid[5][10];which creates an array of 5 rows and 20 columns in the run-time stack. To create it in the heap instead, use
double* grid = new double[5][10];To delete an array that is in the heap, use
delete [] grid;
To use a two-dimensional array, use grid[i][j] to indicate the variable in grid at row i, column j. Both rows and colums are numbered starting at 0.
You can also use grid[i] to indicate the entire row at index i. So
Storage of two-dimensional arrays
              
              The variables of a two-dimensional array
              are stored consecutively in memory by rows.
              For example, if B is created by
int B[3][2];then the variables in array B are stored in the following order: B[0][0] B[0][1] B[1][0] B[1][1] B[2][0] B[2][1] In general, if array B has r rows and c columns then the memory address of B[i][j] is B + c*i + j.  | 
          
Passing two-dimensional arrays as parameters
              
              Because the computation of the memory address
              of B[i][j] requires knowledge of the number of
              columns in two-dimensional array B, the compiler
              needs to know how many columns B has.
              If you pass a two-dimensional array as a parameter,
              you must include the number of columns.  For example,
  // sum(A,n) returns the sum of all numbers in array
  // A[0,...,n-1].
  int sum(int* A, int n)
  {
    int total = 0;
    for(int i = 0; i < n; i++)
    {
      total += A[i];
    }
    return total;
  }
  // rowsums(B, r) returns an array of the row-sums of
  // two-dimensional array B, which has r rows.
  //  For example, if B holds
  //    2 3 4
  //    5 6 7
  //    2 4 6
  //    7 8 9
  // then sum(B,4) returns an array (allocated in the heap
  // using new) holding
  //
  //    9
  //    18
  //    12
  //    24
  int* rowsums(int B[][3], int r)
  {
    int* A = new int[r];
    for(int i = 0; i < r; i++)
    {
      A[i] = sum(B[i], 3);
    }
    return A;
  }
              
             | 
          
Looping through a two-dimensional array
              
              To look at each thing in a two-dimensional array,
              you typically use two nested for-loops.  For example,
              the following function writes two-dimensional array
              G in a grid format.
  void show(int G[][5], int r)
  {
    for(int i = 0; i < r; i++)
    {
      for(int j = 0; j < 5; j++)
      {
        printf("%8i", G[i][j]);
      }
      printf("\n");
    }
  }
              Note that the coding standards for this course require only one looop
              per function.  To look at all members of a two-dimensional array
              with that restriction, you would write a function that handles
              a single row, as suggested by the following implementation of show.
  void showRow(int G[][5], int i)
  {
      for(int j = 0; j < 5; j++)
      {
        printf("%8i", G[i][j]);
      }
      printf("\n");
  }
  void show(int G[][5], int r)
  {
    for(int i = 0; i < r; i++)
    {
      showRow(G, i);
    }
  }
              
              
             | 
          
Write a statement that allocates a new two-dimensional array or doubles with 3 rows and 14 columns in the heap, and makes variable t point to it. Answer
Write a function that takes a two-dimensional array of ints as a parameter, where the array has 10 colums and 5 rows. The function should store 0 into each spot in the array. Answer