Ich weiß nicht, warum in Klammern neben *Predicate int steht.

typedef bool (*Predicate)(int);
c
-3
zmare 18 Jän. 2019 im 03:12

3 Antworten

Beste Antwort

typedef bool (*Predicate)(int); bedeutet, dass Sie einen Typ mit dem Namen Predicate deklarieren, der ein Funktionszeiger für eine Funktion ist, die ein einzelnes int Argument akzeptiert und bool zurückgibt. Eine Funktion, die die Anforderungen erfüllt, wäre:

bool is_zero(int val) {
    return val == 0;
}

Und Sie könnten eine Variable wie folgt deklarieren:

Predicate mypredicate = is_zero;

In diesem Fall besteht die wahrscheinliche Absicht darin, eine Funktion zu deklarieren, die eine Filteroperation unter Verwendung einer zur Laufzeit bereitgestellten Prädikatfunktion ausführt. es würde Predicate als eines seiner Argumente akzeptieren.

4
ShadowRanger 18 Jän. 2019 im 00:15

Dies deklariert Predicate als Zeigertyp für Funktionen, die einen int -Parameter verwenden und ein bool -Ergebnis zurückgeben. int steht in Klammern, um anzuzeigen, dass es sich um einen Parametertyp handelt.

Sie könnten es so verwenden:

typedef bool (*Predicate)(int);
bool always_true(int) { return true; }
Predicate p = &always_true;
4
Jeremy Roman 18 Jän. 2019 im 00:15

Es ist ein typedef des Funktionszeigers mit einem Parameter vom Typ int und dem zurückgegebenen bool

Funktionszeiger sind der einzige Ort, an dem es gut ist, Zeiger einzugeben.

typedef bool (*Predicate)(int);

bool is_zero(int x)
{
   return x ==0;
}

Predicate myfuncptr = is_zero;


int main()
{
  if(myfuncptr(5)) 
    printf("Zero");
  else
    printf("Not zero");
}
0
P__J__ 18 Jän. 2019 im 00:14