Array Länge ermitteln
-
Wie kann ich es machen, das bei len die Länge der Array bekomme ?
In diesem Beispiel wäre dies 5.
Momentan wird 8 ausgegeben, das sieht eher nach der Bit-Grösse eines int aus.#include <iostream> using namespace std; int counter = 0; struct status { int start; int stop; }; status helli[] = {{0, 30}, {60, 90}, {120, 150}, {180, 210}, {0, 0}}; void testCounter(struct status value[]) { // int len= sizeof(value) / sizeof(status); int len= sizeof(value); // Es kommt falscher Wert. cout << len << endl; for (int i=0; i<len; i++) { if (value[i].start == counter){ return; } if (value[i].stop == counter){ return; } } } int main() { cout << endl; testCounter(helli); return 0; }
-
Mathuas schrieb:
Momentan wird 8 ausgegeben, das sieht eher nach der Bit-Grösse eines int aus.
8 ist die Größe Deines Funktionsparameters
value
der Trotz der schicken[]
hinter dem Namen nichts anderes ist als einstatus*
.
Google Stichwort: "array to pointer decay"Generell die Länge eines Arrays: std::size() (C++17)
bzw < C++17: https://stackoverflow.com/questions/19258132/is-there-some-function-like-stdsizeps: Globale Variablen sind bääääh.
-
Hat kein C++ Profi eine Lösung ?
Mit Google finde ich nichts schlaues, sonst hätte ich nicht gefragt.
Unter Pascal, geht dies sehr einfach:
len := Length(value);
ps: Globale Variablen sind bääääh.
Das Ganze sollte auf einem Arduino laufen.
-
Mathuas schrieb:
Hat kein C++ Profi eine Lösung?
Übergib deiner Funktion statt dem Array zwei Iteratoren. Oder ... was spricht gegen
std::for_each()
?Mathuas schrieb:
Mit Google finde ich nichts schlaues, sonst hätte ich nicht gefragt.
Hast Du nach "array to pointer decay" geschaut? Was hast Du daran nicht verstanden?
Mathuas schrieb:
Unter Pascal, geht dies sehr einfach:
len := Length(value);
#include <iterator> int value[5]; std::size_t len = std::size(value);
Mathuas schrieb:
ps: Globale Variablen sind bääääh.
Das Ganze sollte auf einem Arduino laufen.
Was hat das damit zu tun?
-
Kannst du nicht std::vector oder std::array verwenden?