Identificatore da variabile

Salve a tutti!
Mi chiedevo se era possibile attribuire ad un identificatore di una variabile il contenuto di un un’altra variabile. Mi spiego meglio con un esempio.
Ho una struttura del tipo:

struct assi
{
  bool DIREZIONE;
  ...
} X, Y, Z;

Poi all’interno del loop ho:

  if(INVERTIRE)
  {
    X.DIREZIONE=HIGH;
  }else
  {
    X.DIREZIONE=LOW;  
  }

Questa porzione di codice si ripete anche per gli assi y e z.
Per evitare questa ripetizione avevo pensato di creare un array di tipo char del tipo:
char asse[4] = {‘X’,‘Y’,‘Z’};
Arrivati a questo punto volevo utilizzare un for:

for(i=0;i<4;i++)
{
  if(INVERTIRE)
  {
    asse[i].DIREZIONE=HIGH;
  }else
  {
    asse[i].DIREZIONE=LOW;  
  }
}

In pratica volevo utilizzare il valore dell’array asse per richiamare l’oggetto della struttura. Ma così com’è non funziona.
E’ possibile realizzare in qualche modo ciò?

Ma non te ne esci prima con

x.direzione = invertire;
y.direzione = invertire;
z.direzione = invertire;

?

E poi perchè 4 ?

char asse[4] = {'X','Y','Z'};

Se son 3 assi, e definisci 3 valori, allora l'array va da 0 a 2 quindi 3.
Quindi:

char asse[3] = {'X','Y','Z'};

Ancora meglio

char asse[] = {'X','Y','Z'};
struct assi
{ bool DIREZIONE;
  ...
} asse[3];        // 0=X 1=Y 2=Z
---
for(i=0;i<3;i++)
{ if(INVERTIRE)
  { asse[i].DIREZIONE=HIGH;
  }
  else 
  { asse[i].DIREZIONE=LOW;  
  }
}

ATTENZIONE: NON puoi usare come indice ‘X’,‘Y’ o ‘Z’ !!!
Al limite dichiara delle define

#define ASSE_X 0
#define ASSE_Y 1
#define ASSE_Z 2
...
if(asse[ASSE_X].DIREZIONE==HIGH)
{...

Ma non te ne esci prima con...

Anche secondo me fa prima e pure meglio come hai suggerito.

asse[i].DIREZIONE=HIGH;

Il codice sopra non compila e termina con errore asse non ha membro DIREZZIONE.

Per funzionare, "asse" deve essere un array di 3 elementi di cui ogni elemento è di tipi puntatore a "struct assi"

struct assi * asse[] = { &X, &Y,  &Z };

E si accede a membro di struttura attraverso il puntatore asse[n], usando l'operatore di risoluzione "->" al posto di "."

asse[i]->DIREZIONE=HIGH;

Oppure crei un array in cui ogni elemento è di tipo "struct assi", come ha mostrato nid69ita.

Ciao.

Grazie per i consigli che mi avete dato. Ho risolto il mio problema :slight_smile:

Spiega come hai risolto, così se qualcuno in futuro dovesse avere dei dubbi simili potrà trarne giovamento!

paulus1969:
Spiega come hai risolto, così se qualcuno in futuro dovesse avere dei dubbi simili potrà trarne giovamento!

Ho utilizzato il metodo proposto da MauroTec e funziona egregiamente