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 ein status* .
    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-stdsize

    ps: 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?


Anmelden zum Antworten