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-ID: 6978029782

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

Ausgedruckt am: 20.11.2024 um 00:11 Uhr

Phreak87
Lösung Phreak87 06.05.2023 um 12:01:03 Uhr
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