2017-05-02 4 views
2

Während ich C++ Primer las, kam ich auf diesen CodeC++ Initialisieren Struktur mit struct Zeiger

struct destination; 
struct connection; 
connection connect(destination*); 

Was bedeutet connection connect(destination*); Linie tun? Und wie kommt es, dass es gut kompiliert, obwohl es den Namen der Struktur übergeben? Soll nicht die struct Variable initialisiert werden, die dann so geht?

struct destination; 
struct connection; 
destination dest; 
connection connect(dest); 

Antwort

6

Was bedeutet connection connect(destination*); Linie tun?

Es deklariert eine Funktion connect, genannt, die eine destination* und gibt connection nimmt.

In dieser Deklaration wird kein Name für den Parameter angegeben (der zwar nicht besonders hilfreich für den Leser ist). Vermutlich vorgesehen sein, dass werde, wenn die Funktion definiert ist, etwa so:

connection connect(destination* ptr) 
{ 
    connection conn; 
    // do something with conn and ptr 
    return conn; 
}; 

Der Rest der Code-Schnipsel Buch (das Teil, das Sie nicht Zitat tat) zeigt einen Aufruf der Funktion connect, von innerhalb einer anderen Funktion namens f.

Funktionsdeklarationen wurden vor sechs Kapiteln behandelt.

wie kommt es kompiliert gut, obwohl es den Namen der Struktur übergeben?

Weil das ist, was Sie in einer Funktionsdeklaration tun sollten.

Soll nicht die struct Variable initialisiert werden, die dann so übergeben?

Nr

+0

ok, die Sinn macht. Ich war verwirrt, wenn es eine Verbindungsstruktur namens connect machte oder es war eine Funktion, die eine Verbindung zurückgab – glucomine

+0

@qwertz: Die einzige Möglichkeit, wirklich zu erzählen, ist genau, wie Sie (fast!) Getan haben: wo der Typ 'destination *' ist kann nur eine Erklärung sein. Es wäre nicht zulässig, eine Funktion (oder ein Objekt zu initialisieren) so aufzurufen. –