phreak87
Goto Top

Multidimensionales Array an Funktion übergeben in C (ESP8266)

Hallo,

bei meinem Github-Projekt [OilMeter https://github.com/Phreak87/OilMeter]
möchte ich ein wenig den Code modularisieren und wollte deshalb mein
Multidimensionales Array an eine Funktion übergeben:

Array:
const char HASSDistance[][7][32]= {
  // {"homeassistant/sensor/oilmeter/color_r/config",      "Color_R",              "oilmeter/sensor/0/R",   "OilMeter_Sensor0_R",      "RGB",         "gas", "measurement"}, 
  // HASS-NODE              NAME                    STATE-TOPIC             UNIQUE-ID         EAS-Unit        DEV-CLA  STATE-CLASS
    {"Dist/config",         "Distanz",              "sensor/HCSR04/Dist",   "Sensor0_R",      "cm",          "water", "measurement"},  
    {"ActTankL/config",     "Tankinhalt_Aktuell",   "ActTankL",             "ActTankL",       "L",           "water", "measurement"},   
    {"MaxTankL/config",     "Tankinhalt_Maximal",   "MaxTankL",             "MaxTankL",       "kWh",         "water", "measurement"}  
};

Funktion:
void PublishHASS2 (const char Array [][7][32]){
      Serial.println ("(re-)publishing HASS-Topics");  
      int size = sizeof (Array) / sizeof (Array[0]);
      Serial.println (size);
      ...
} 

Aufruf im Loop:
PublishHASS2(HASSDistance);

Das Array ist public, weshalb ich gerne die Referenz auf das Array übergeben würde.
Ich scheitere jedoch daran dass die Funktion das Array wirklich bekommt. Der Serial.Print gibt
bei der Array länge 0 Zeilen aus. wenn ich das Array direkt anspreche dann wird die richtige
Anzahl der Zeilen ausgegeben.

Könnt ihr mir als blutigem Anfänger erklären was ich hier falsch mache - evtl. mit einem Beispiel?
die Sache mit den Pointern und char arrays- sowie den pointern auf char arrays (und array-arrays*) hab
ich irgendwie noch nicht so richtig verstanden ...

Wie müsste ich das Array/die Funktion korrekt definieren und übergeben um das gewünschte Resultat zu erreichen?
(PublishHASS2(&HASSDistance); compiliert erst gar nicht ... ).

Wie im Titel erwähnt sollte das ganze auf dem ESP8266 funktionieren ...

Grüße
Phreak87

Content-Key: 6978029782

Url: https://administrator.de/contentid/6978029782

Printed on: April 27, 2024 at 08:04 o'clock

Member: Phreak87
Solution Phreak87 May 06, 2023 at 10:01:03 (UTC)
Goto Top
Hallo,

habe jetzt *eine* Lösung gefunden, die funktioniert - jedoch aber nicht wie
das Original-Array im Bezug auf sizeof:

void PublishHASS2 (const char (*Array)[7][32]){
  int size = sizeof (Array) -1);
  Serial.println(size);
  for (int i = 0; i < sizeof(Array) -1); i++) {
    for (int j = 0; j < sizeof(Array[0]) / sizeof(Array[0][0]); j++) {
      Serial.println(Array[i][j]);
      delay(10000);
    }
  }
}

ich denke aber dass man damit leben kann ...
vielen dank an die vielen Priv. Kommentare, die mir den Tipp gegeben haben!

Grüße
Phreak87