I would like to pass a character array micPointsChar[] to a function initMicPoints() and parse it into a multi-dimensional array micPoints.  I am able to successfully do this using a one dimensional array:
char micPointsChar[30 + 1] = {};
float *initMicPoints(char micPointsChar[], float micPoints[3]);
int main()
{
  // Read in mic points from file
    char micPointsChar[40] = "2,3.343,4.432\n";
    float micPoints[3] = {};
    float *newMicPoints = initMicPoints(micPointsChar, micPoints);
    for (int i = 1; i <= 3; i++)
    {
      Serial.print(newMicPoints[i]);
      Serial.print("\n");
    }
    return 0;
}
float *initMicPoints(char micPointsChar[], float micPoints[3])
{
  static int i = 1;
  static int micNum = 1;
  static int numMics = 1;
  float coordinateDec = 0;
  char *coordinate = strtok(micPointsChar, ",\n");
  coordinateDec = atof(coordinate);
  while (micNum <= numMics)
  {
    while (i <= ((micNum * 3)) && (coordinate != NULL))
    {
      if (i == ((micNum * 3) - 2))
      {
        micPoints[1] = coordinateDec;
      }
      else if (i == ((micNum * 3) - 1))
      {
        micPoints[2] = coordinateDec;
      }
      else if (i == ((micNum * 3) - 0))
      {
        micPoints[3] = coordinateDec;
      }
      coordinate = strtok(NULL, ",\n");
      coordinateDec = atof(coordinate);
      i++;
    }
    micNum++;
  }
  return micPoints;
}
This outputs the expected:
2.00
3.34
4.43
However, when I change my code to handle a multidimensional array, micPoints[360][3]:
char micPointsChar[30 + 1] = {};
float *initMicPoints(char micPointsChar[], float micPoints[360][3]);
int main()
{
  // Read in mic points from file
    char micPointsChar[40] = "2,3.343,4.432\n";
    float micPoints[360][3] = {};
    float *newMicPoints = initMicPoints(micPointsChar, micPoints);
    static int i = 0;
    for (i = 1; i <= 3; i++)
    {
      Serial.print(*newMicPoints[i][0]);
      Serial.print("\n");
      Serial.print(*newMicPoints[i][1]);
      Serial.print("\n");
      Serial.print(*newMicPoints[i][2]);
      Serial.print("\n");
    }
    return 0;
}
float *initMicPoints(char micPointsChar[], float micPoints[360][3])
{
  static int i = 1;
  static int micNum = 1;
  static int numMics = 1;
  float coordinateDec = 0;
  char *coordinate = strtok(micPointsChar, ",\n");
  coordinateDec = atof(coordinate);
  while (micNum <= numMics)
  {
    while (i <= ((micNum * 3)) && (coordinate != NULL))
    {
      if (i == ((micNum * 3) - 2))
      {
        micPoints[i][0] = coordinateDec;
      }
      else if (i == ((micNum * 3) - 1))
      {
        micPoints[i][1] = coordinateDec;
      }
      else if (i == ((micNum * 3) - 0))
      {
        micPoints[i][2] = coordinateDec;
      }
      coordinate = strtok(NULL, ",\n");
      coordinateDec = atof(coordinate);
      i++;
    }
    micNum++;
  }
  return micPoints;
}
I receive a compile time error of:
cannot convert 'float (*)[3]' to 'float*' in return
Am I making this too complicated? What is the best way to return a multidimensional array?
 
     
     
    