2016-11-19 8 views
1

Meine Struktur:Deklarieren Variable in Funktionsaufruf

struct Point { 
    int x; 
    int y; 
    Point(int nX, int nY) { x = nX; y = nY; } 
    Point() {}; 
}; 

Funktion:

void functionName(Point target); 

Und ich möchte Variable in Funktionsaufruf deklarieren: (Pseudo-Code)

functionName(Point variable(5,0)); 

Ich schreibe in C oder C++.

+7

Sie können das in keiner Sprache tun. Wofür brauchst du das? –

Antwort

4

Wenn Sie bedeutete eine temporäre Point zu konstruieren und an die Funktion übergeben, könnte man (für C++):

functionName(Point(5,0)); 

Oder für C++ 11:

functionName(Point{5,0}); 
2

[Für C , die c'tor und d'tor] ignorieren

struct Point { 
    int x; 
    int y; 
}; 

eine Verbindung verwenden wörtlichen wie folgt aus:

functionName((struct Point){5, 0}); 

Bitte beachten Sie, dass das von diesem definierte zusammengesetzte Literal auf dem Stapel des aktuellen Kontexts lebt, bis der Kontext verlassen ist.

Um es sofort die Funktion Rückkehr ausgeplant werden müssen, den Funktionsaufruf in seinem eigenen Kontext wickeln, indem Sie:

{ 
    functionName((struct Point){5, 0}); 
} 
+0

Ein bisschen nicht verwandt, aber ist dieser letzte Punkt über zusammengesetzte Literale auch für andere Arten von Variablen gültig? Kannst du auch (zuverlässig) auf sie zugreifen, während sie noch auf dem Stapel sind? – ToVine

+0

@ToVine: Ja, sicher. – alk

+0

Wie bekommen Sie dann die Referenzen/Zeiger? (es ist offensichtlich nicht, wie ich denke, man sollte darüber gehen, wenn im Voraus wissen, dass die Variable außerhalb dieser spezifischen Funktion Anruf benötigt wird, bin ich nur neugierig) – ToVine

0

Falls Sie diese Variable verwenden möchten, nachdem die Funktion beendet (ich glaube, Sie könnten auch tun, da Sie einen Namen) geben Ihr Argument wollen, würden Sie wahrscheinlich ref/Zeiger, zum Beispiel passieren soll:

void functionName(Point& target); 
Point variable(5,0); 
functionName(variable); 

Falls Sie nicht wirklich die Variable benötigen, können Sie einfach einen R-Wert übergeben , indem der Konstruktor als Argument aufgerufen wird:

functionName(Point(5,0)); 

Beachten Sie, dass das 'Ziel' zerstört wird, wenn die Funktion zurückkehrt.

+0

"* ... beachten Sie, dass das 'Ziel' zerstört wird, wenn die Funktion * zurückgibt" was (leicht) anders in C wäre. – alk