Pointer als Funktionsparameter



  • Hallo,

    ich habe einige vorgegebene Funktionen der Form

    func(double * array, int * laenge)
    {
        //bearbeite array
    }
    

    Bisher rufe ich die Funktion immer so auf:

    double a[5] = {...};
    int laenge = 5;
    func(a, &laenge);
    

    Gibt es eine Möglichkeit, die Funktion aufzurufen, ohne extra eine Variable laenge definieren zu müssen? Ich würde gerne so etwas schreiben:

    double a[5] = {...};
    func(a, 5);
    

    Dies funktioniert natürlich nicht (segfault).

    Es ärgert mich, ständig lokale Variablen nur für den Funktionsaufruf definieren zu müssen.

    Viele Grüße,
    Bernhard





  • ^^entweder du änderst die funktion, oder bastelst eine dazwischen

    int func2 (double * array, int laenge)
    {
      int l = laenge;
      func (array, &l);  // original aufrufen
      return l;
    }
    

    🙂



  • edit: oder gleich so...

    int func2 (double * array, int laenge)
    {
      func (array, &laenge);  // original aufrufen
      return laenge;
    }
    

    🙂



  • Hab mir schon gedacht, dass es direkt nicht anders geht.

    Da es mehrere Funktionen sind, ist das dazwischenbasteln ein bisschen umständlich.

    Ich glaube, ich erstelle lieber ein paar globale Konstanten und nehm die zum übergeben. Da ich weniger unterschiedliche Übergabemöglichkeiten habe als Funktionen, geht das schneller 😉

    Vielen dank,
    Bernhard



  • Das hier könnte eventuell gehen:

    func(a, &(struct {int i;}){5}.i);
    

    Edit: Oder so:

    func(a, (int[]){5});
    


  • namespace invader schrieb:

    Edit: Oder so:

    func(a, (int[]){5});
    

    ^^sieht extrem nach c99-only aus. ich würd's besser in ein makro packen. so sieht's ja echt schlimm aus.
    🙂


Anmelden zum Antworten