Struct an Funtion mit call by Reference/Pointer übergen

Hallo,

wie übergebe ich (richtig) ein struct an eine Funktion mit call by reference bzw by Pointer?

So wie es bei proggen.org - Strukturen - Raum für Ideen beschreiben wird (etwa in der Mitte der Seite) habe ich es nicht zum laufen bekommen. Ist das bei Arduino etwas besodneres?

Und worin besteht der Unterschied: “typedef struct” und einfach nur “struct” ?

Habe mal folgenden Code, der auch läuft, bin mir aber nicht sicher, ob es so richtig ist, bzw man es so oder vielleicht doch anders macht.

Vielen Dank für Rückmeldungen.

struct TaskList{                                // Task Pointer List/Struct
  unsigned long next;
  byte id;
};

TaskList list1[2] = { 
  { 1234, 0},
  {5678 , 1} 
  };



//##################################
void print_struct(struct TaskList *p ){  // Call by reference (?)

  Serial.println(p[0].next);
  Serial.println(p[1].next);
  
  Serial.println(p->id);   // diese Methode ok?
  p +=1;
  Serial.println(p->id);
 
}




void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.print(F("\n\nStarting...\n File: " __FILE__ "\n Date: " __DATE__ "\n Time: " __TIME__ "\n IDE : "));
  Serial.println(ARDUINO);
  Serial.println();

   print_struct(list1);

}

void loop() {
  // put your main code here, to run repeatedly:

}
typedef struct
{
  unsigned long next;
  byte id;
}Task;

Task List[2] = { {1234,0},{5678,1},};

void PrintTask(Task (*t))
{
  Serial.println(t->next);
  Serial.println(t->id);
}

void setup() 
{
  Serial.begin(9600);
  PrintTask(&List[0]);
  PrintTask(&List[1]);
}


void loop() 
{
}

Du übergibst gar kein struct direkt an eine Funktion, sondern ein Array aus structs. Wobei die Funktion beides schluckt.

Und worin besteht der Unterschied: "typedef struct" und einfach nur "struct" ?

Mit dem typedef kannst das "struct" keyword hier weglassen:

void print_struct(struct TaskList *p )
  Serial.println(p->id);   // diese Methode ok?
  p +=1;
  Serial.println(p->id);

Das geht, ist aber gar nicht gut verständlich

Besser:

Serial.println(p[0].id);
Serial.println(p[1].id);

Oder aber wie combie, nicht ein Array übergeben, sondern wirklich nur ein einziges struct. Dann kommst du da gar nicht in Versuchung irgendwelche Tricks mit Zeigern zu machen.

Wenn du ein Array übergibst, dann solltest du neben dem Zeiger noch die Anzahl der Elemente übergeben. Dann kannst du einfach mit einer for-Schleife darüber iterieren und der Code skaliert schön wenn das Array größer wird.

Vielen Danke, jetzt haut es hin!

Übergebe weiterhin ein Pointer zu Array of Structs + die Anzahl der Elemente im Array. :)