Funktion innerhalb einer Funktion in C++ aufrufen
- Funktionsaufrufmechanik Schritt für Schritt in C++
-
Verwenden Sie die Anweisung
return
, um eine Funktion innerhalb einer Funktion in C++ aufzurufen -
Verwenden Sie
std::pair
, um zwei Werte aus der Funktion in C++ zurückzugeben
In diesem Artikel werden verschiedene Methoden zum Aufrufen einer Funktion innerhalb einer Funktion in C++ erläutert.
Funktionsaufrufmechanik Schritt für Schritt in C++
Der Aufruf einer Funktion beinhaltet die Berechnung der Werte für ihre Argumente, die in den lokalen Bereich gestellt werden. Da in einem Funktionskörper normalerweise lokale Variablen enthalten sind, muss ein neuer Speicherplatz vorhanden sein, der als Stapelrahmen bezeichnet wird. Funktionsargumente werden mit entsprechenden Namen kopiert oder referenziert und konvertiert, wenn die Umwandlungsoperation beteiligt ist. Sobald die vorherigen Schritte ausgeführt wurden, werden die Anweisungen im Funktionsblock ausgeführt, bis die return
auftritt. Die Anweisung return
erzwingt, dass der Kontrollfluss an die aufrufende Funktion zurückgegeben wird. Zu diesem Zeitpunkt wird der automatisch zugewiesene Stapelrahmen verworfen und die Steuerung wird über den Aufrufercode fortgesetzt.
Die Funktionen haben einen Rückgabetyp, der den Objekttyp definiert, der an den Aufrufercode übergeben werden soll. Wir können eine Funktion haben, die keinen Wert zurückgibt und mit dem Typ void
bezeichnet wird. Wenn die Funktion einen gültigen Rückgabetyp hat, können wir die mehreren Funktionsaufrufe verketten, wie im folgenden Beispielcode gezeigt. Beachten Sie, dass das innere addTwoInts
zuerst ausgeführt wird und der zurückgegebene Wert als eines seiner Argumente an das äußere addTwoInts
übergeben wird.
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int addTwoInts(int i, int j) { return i + j; }
int main() {
cout << "2 + 1 + -3 = " << addTwoInts(addTwoInts(2, 1), -3) << endl;
cout << "(10 + 10) + (11 + -11) = "
<< addTwoInts(addTwoInts(10, 10), addTwoInts(11, -11)) << endl;
cout << "(12 + -9) + 10) + -11) = "
<< addTwoInts(addTwoInts(addTwoInts(12, -9), 10), -11) << endl;
return EXIT_SUCCESS;
}
Verwenden Sie die Anweisung return
, um eine Funktion innerhalb einer Funktion in C++ aufzurufen
Eine weitere nützliche Methode zum Aufrufen einer Funktion innerhalb einer Funktion ist die Verwendung der Anweisung return
. Beachten Sie jedoch, dass die aufgerufene Funktion einen Rückgabewert haben sollte, der zu dieser Notation passt oder nicht kompiliert werden kann. Darüber hinaus sollte die aufrufende Funktion denselben Rückgabetyp haben, wenn der einzige Ausdruck nach der Anweisung return
die Anruffunktion ist, wie im folgenden Beispielcode gezeigt.
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int addTwoInts(int i, int j) { return i + j; }
int multiplyAccumulate(int i, int j) { return addTwoInts(i, i * j); }
int main() {
cout << "multiplyAccumulate(1,2) = " << multiplyAccumulate(2, 2) << endl;
return EXIT_SUCCESS;
}
Verwenden Sie std::pair
, um zwei Werte aus der Funktion in C++ zurückzugeben
Es gibt Szenarien, in denen die Funktion geeignet ist, mehrere Werte an den Aufrufer zurückzugeben. In solchen Fällen kann man die Struktur std::pair
verwenden, um jedes Element im entsprechenden Datenelement zu speichern und den Wert zu übergeben. Mit dem Zeiger auf das Array oder einen beliebigen STL-Container, der ausreichende Funktionen für das jeweilige Problem bietet, können weitere Elemente übergeben werden.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
std::pair<int, int> findMaxMin(vector<int> &arr) {
std::pair<int, int> ret;
auto max = std::max_element(arr.begin(), arr.end());
auto min = std::min_element(arr.begin(), arr.end());
ret.first = arr.at(std::distance(arr.begin(), max));
ret.second = arr.at(std::distance(arr.begin(), min));
return ret;
}
int main() {
vector<int> array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
auto ret = findMaxMin(array);
cout << "Maximum element is " << ret.first << ", Minimum is " << ret.second
<< endl;
return EXIT_SUCCESS;
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook