Protocol for avoiding pointers

Since the compiler knows both the type and size of the array, I'd argue that loop is better written without pointers and without manually setting the iteration limits:

void disp () {
  for (const auto &mtr : motors)  {
    sprintf (s, "    %2d %2d %3s %6d  %s", mtr.StepPin, mtr.DirPin,
             mtr.forward ? "For" : "Rev", mtr.pos, mtr.Desc);
    Serial.println (s);
  }
}