2017-03-06 3 views
-3
  1. Normalerweise erklären wir einen Funktionsprototyp in Header-Datei wie:C: Fragen zu Funktionsprototyp in Header-Datei

    void function();

    Kann diese Funktion jedes Argument nehmen?

  2. Wenn die Funktion Integer als Argument verwendet, schreiben wir: void function(int);

    Aber manchmal sehe ich Leute schreiben: void function(int*);

    Was die * ist hier?

  3. Wenn die Funktion kann ein einzelnes Argument von mehreren Typen, wie Integer oder doppelt, was sollen wir tun?

+3

1: Nein, 2: Lesen Sie, was ein ** Zeiger ** ist. 3: EDIT: meinst du "Funktion, die * sowohl * integer und double (' void function (int, double) ') oder Funktion, die * entweder * nehmen könnte? Im zweiten Fall, schaue auf ** function overloading * * Sehr nützlich – Fureeish

+0

@Fureeish Funktion, die entweder. Ich dachte 1. bedeutet, kann jede Art und jede Anzahl von Argumenten vor. – kyle

+0

@Fureeish ist Zeiger etwas ähnlich zu Array? Ich sehe, dass Leute schreiben 'int *' in Prototyp, aber in der Hauptdatei nimmt die Funktion ein ganzzahliges Array. – kyle

Antwort

0
  1. Normalerweise erklären wir einen Funktionsprototyp in Header-Datei wie:

    void function(); 
    

    Kann diese Funktion jedes Argument nehmen?

    Es ist nicht spezifiziert, welche Argumente diese Funktion benötigt.

  2. Wenn die Funktion Integer als Argument, wir schreiben:

    Leere Funktion (int);

    Aber manchmal sehe ich Leute schreiben: void function (int *);

    Was macht die * hier?

    Dies ist ein pointer zu einem int.

  3. Wenn die Funktion mehrere Arten von Argumenten annehmen kann, wie integer und doppelt, was sollen wir tun?

    int und double sind inkompatible Typen. Sie können keine Funktion annehmen, die die eine oder die andere übernimmt. Sie können nicht zwei verschiedene Funktionen mit zwei verschiedenen Typen definieren, die jedoch denselben Namen haben.

+0

für 1 .: Es ist nicht spezifiziert, welche Argumente diese Funktion annehmen wird. Ist das der Fall, wo wir nicht wissen, welche Art es nehmen wird, oder es kann einfach kein Argument nehmen? – kyle

+1

@ kyle Wir tun nicht, welche Art von Argument wird es dauern. Um zu erklären, dass 'function' keine Argumente annehmen soll, müssen Sie das Schlüsselwort' void' verwenden: 'void function (void);' – Alexander

+2

Für 3 sind überladene Funktionen in C nicht erlaubt. –

0
  1. Die Frage selbst nicht richtig formuliert ist. Dies ist überhaupt kein Prototyp. Dies ist eine Nicht-Prototyp Funktionsdeklaration.

    Es sagt nichts über Funktionsargumente aus, was genau unterscheidet es vom Prototyp. Die so deklarierte Funktion kann mit beliebigen Argumenten aufgerufen werden.

    Wenn jedoch die im Aufruf verwendeten Argumente (nach üblichen arithmetischen Konvertierungen) nicht mit den verwendeten Parametern der tatsächlichen Definition (in Anzahl und Typ) übereinstimmen, ist das Verhalten nicht definiert. Wenn die tatsächliche Funktion als variadic definiert ist (hat ... in der Parameterliste), ist das Verhalten nicht definiert.

  2. Dies sind Prototypen. Die erste besagt, dass die Funktion einen einzelnen int Parameter hat. Die zweite sagt, dass es einen einzigen int * Parameter (einen Zeiger auf int) hat. Es ist nichts besonderes, wenn Sie wissen, was Zeiger sind.

  3. Es ist nicht klar, was gefragt wird. "Was sollen wir machen?" Ich weiß nicht ... Fliege nach Hawaii und verbringe fünf Tage damit, nackt im Regen zu tanzen.

    Diese Funktion wird als Einnahme mehrere Argumente von verschiedenen Arten erklärt

    void foo(int, double, char, short *); 
    

    Es gibt nichts Besonderes. Wenn Sie etwas anderes gemeint haben - klären Sie die Frage.