Kann ich Arrays auch an Funktionen übergeben? Ich würde mit Primitiven wie int tun und bool?
Ja, aber nur mit Hilfe von Zeigern (dh durch Referenz).
Kann ich sie nach Wert übergeben?
Nein. Sie können Klassen erstellen, die dies unterstützen, aber einfache Arrays nicht.
Wie weiß die Funktion über die Größe des Arrays, das übergeben wird?
Es tut es nicht. Das ist ein Grund, Dinge wie vector<T>
anstelle von T *
zu verwenden.
Erläuterung
Eine Funktion kann eine Referenz oder einen Zeiger auf ein Array einer bestimmten Größe nehmen:
%Vor%Ich bin mir aber ziemlich sicher, dass das nicht das ist, wonach der OP gesucht hat.
Sie können Arrays wie üblich in C übergeben (Arrays werden zu Zeigern), oder Sie können sie als Referenz übergeben, aber sie können nicht als Wert übergeben werden. Für die zweite Methode tragen sie ihre Größe mit sich:
%Vor% Meistens ist die Verwendung von std::vector
oder einer anderen Sequenz in der Standardbibliothek eleganter, es sei denn, Sie benötigen native Arrays speziell.
Kann ich Arrays auch an Funktionen übergeben? Ich würde mit Primitiven wie int tun und bool?
Ja, das kannst du. Übergeben einen Array-Namen als Argument für eine Funktion übergibt die Adresse des ersten Elements.
Kurz gesagt:
%Vor%entspricht
%Vor%Kann ich sie nach Wert übergeben?
Nicht wirklich. Der "Wert", der mit einem Array-Namen übergeben wird, ist die Adresse des ersten Elements.
Die einzige Möglichkeit, eine Kopie eines C-artigen Arrays zu übergeben, besteht darin, sie in ein class
oder struct
umzubrechen, das die Deep-Copy-Semantik implementiert.
Wie kennt die Funktion die Größe? des Arrays ist es übergeben?
Es ist nicht, wenn Sie Ihre Funktion haben, nehmen Sie einen zusätzlichen Parameter, der die Größe des Arrays ist.
Sie können ein Array übergeben, aber Sie müssen die Größe mit übergeben, wenn Sie es sicher wissen wollen:
%Vor%Arrays werden immer als Referenz übergeben und die Funktion kann auf zwei Arten geschrieben werden:
%Vor%oder
%Vor%Wenn Sie ein Array an eine Funktion übergeben, erhält die Funktion im Wesentlichen einen Zeiger auf dieses Array, wie im zweiten Beispiel oben gezeigt. Beide Beispiele werden dasselbe erreichen.
Sie können ein std::vector
und ähnlich gut entworfenes Objekt nach Wert übergeben (obwohl das eher ungewöhnlich ist). In der Regel übergeben Sie die Referenz oder const Referenz.
Ein C / C ++ - Array, wie in
%Vor%wird immer als Referenz übergeben. Außerdem kann die Funktion die wahre Größe des vom Aufrufer übergebenen Arguments nicht bestimmen, Sie müssen eine Größe annehmen (oder sie als separaten Parameter übergeben).
C-artige Arrays verhalten sich sehr seltsam, wenn sie in Funktionen übergeben werden. Für Arrays mit fester Größe würde ich stattdessen std::array<int, 10>
empfehlen, die wie integrierte Typen von Wert übergeben werden können. Für Arrays mit variabler Größe empfehle ich std::vector<int>
, wie in anderen Antworten vorgeschlagen.
void f(int a[]);
und nennen Sie es so: int myArr[size]; f(myArr);
Ja, Sie können sie genauso übergeben wie primitive Typen. Ja, Sie können nach Wert übergeben, wenn Sie wirklich mit etwas Wrapper-Code wollten, aber Sie sollten es wahrscheinlich nicht. Es wird die Größe des Funktionsprototyps als die Länge annehmen - die mit den eingehenden Daten übereinstimmt oder nicht -, also weiß es nicht wirklich.
Oder!
Übergeben Sie einen Referenz- oder Const-Verweis an einen Vektor und seien Sie sicherer und halten Sie die Größenangaben an Ihren Fingerspitzen fest.