[Solved] Array of structs or pointer indexing ... Options / Best practice?

wildbill,
I have tested that scenario and you are correct, using the vars breaks the pointer indexing as you predicted.
Actually that is good to know, because I understand it now.

So I am using arrays like I started with .... Only better now I have some idea what I am doing ...

This is working, thanks everyone.

// Test data

float BatVolts = 13.5;
float ACVolts = 236;
float WindSpeed = 3;
float PVCurrent = 20;

typedef struct{                                            // new type (xVar - Exposed variables)
  char Name[10];
  float * Ptr;
}xVar;
float * ValPtr;

xVar ExposedVars[20];                                      // make an array of xVars

void MapFloatName(float * NewVarPtr, char NewName[]){      // function to build array data, fetching the pointer in the process
  static int VarCount = 0;
  ExposedVars[VarCount].Ptr = NewVarPtr;
  strcpy (ExposedVars[VarCount].Name,NewName);
  VarCount++;
}


float * GetVarRef(char VarName[]){                         // function to lookup names and return a pointer to the apropriate variable
  int iLoopCount = 0;
  while(strlen(ExposedVars[iLoopCount].Name) > 0){
   Serial.print(VarName);
   Serial.print("  <->  ");
   Serial.println(ExposedVars[iLoopCount].Name);
   if(strcmp(ExposedVars[iLoopCount].Name,VarName)==0)
   {
     Serial.print(VarName);
     Serial.print(" found @ ");
     Serial.print(iLoopCount);
     return ExposedVars[iLoopCount].Ptr;
   }
    iLoopCount++;   
  }
  Serial.print(VarName);
  Serial.println(" not found");
  return NULL;
}

int freeRam () {
  extern int __heap_start, *__brkval; 
  int v; 
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 
}

void setup() 
{
  pinMode(13,OUTPUT);
  digitalWrite(13,HIGH);
  Serial.begin(9600);
  Serial.println(freeRam ());
  MapFloatName(& BatVolts,"BatVolts");
  MapFloatName(& ACVolts,"ACVolts");
  MapFloatName(& BatVolts,"WindSpeed");
  MapFloatName(& ACVolts,"PVCurrent");
  Serial.println(freeRam ());
  Serial.println("");

  ValPtr = GetVarRef("BatVolts");
  if(ValPtr){
  Serial.print("  Value is ");
  Serial.println(* ValPtr);
  }
  Serial.println("");
  
  ValPtr = GetVarRef("BadName1");
  if(ValPtr){
  Serial.print("  Value is ");
  Serial.println(* ValPtr);
  }
  Serial.println("");
  
  ValPtr = GetVarRef("ACVolts");
  if(ValPtr){
  Serial.print("  Value is ");
  Serial.println(* ValPtr);
  }
  Serial.println("");
  
  ValPtr = GetVarRef("PVCurrent");
  if(ValPtr){
  Serial.print("  Value is ");
  Serial.println(* ValPtr);
  }
  Serial.println("");
  
  ValPtr = GetVarRef("WindSpeed");
  if(ValPtr){
  Serial.print("  Value is ");
  Serial.println(* ValPtr);
  }
  Serial.println("");
  
  ValPtr = GetVarRef("BadName2");
  if(ValPtr){
  Serial.print("  Value is ");
  Serial.println(* ValPtr);
  }
  Serial.println("");
}

void loop() 
{  
digitalWrite(13,!digitalRead(13));
delay(250);
}