title: What is the purpose of a triple pointer for 2d array?
body: <pre><code>                 // Triple Pointer Version       
       void init(char ***subjects_array, char***courses_array)
   {
  
  
       int i;
  
      *subjects_array = (char**) malloc (100 * sizeof(char*));
      *courses_array = (char**) malloc(100 * sizeof(char*));
  
  
      for(i = 0; i &lt; INITIAL_COURSE_SIZE; i++)
     {
       (*subjects)[i] = (char*) malloc(4 * sizeof(char));
       (*courses)[i] = (char*) malloc(6 * sizeof(char));
     } 
  
  
    }  // end of Triple pointer version
  
  
                         //  Double Pointer Version
            void init(char** subject_array, char** courses_array) {                   
  
    subject_array = (char **) malloc (100*sizeof(char*));
    courses_array = (char **) malloc (100*sizeof(char*));
  
   for(int i = 0; i&lt;100; i++){
      subject_array[i] = (char*) malloc(4*sizeof(char));
      courses_array[i] = (char*) malloc (6*sizeof(char));
     }
     }
  </code></pre>
  
  <p>My question is: Both versions initiate a 2d array. So what purpose does the triple pointer version serve? It seems that the extra level of indirection serves no "purpose".</p>