Ist es möglich, die Größe eines Arrays zu bestimmen, wenn es an eine andere Funktion übergeben wurde (Größe wird nicht übergeben)? Das Array wird wie ein int-Array initialisiert[] = {XXX} ..
Ich verstehe, dass es nicht möglich ist, sizeof auszuführen, da es die Größe des Zeigers zurückgibt. Der Grund, warum ich frage, ist, dass ich eine for-Schleife innerhalb der anderen Funktion ausführen muss, an der das Array übergeben wird. Ich habe so etwas versucht:
for( int i = 0; array[i] != NULL; i++) {
........
}
Aber ich bemerkte das am nahen Ende des Arrays, Array[i] enthalten manchmal Müllwerte wie 758433, was kein Wert ist, der bei der Initialisierung des Arrays angegeben wurde.
Die anderen Antworten übersehen ein Feature von c++. Sie können Arrays als Referenz übergeben und Vorlagen verwenden:
template <typename T, int N>
void func(T (&a) [N]) {
for (int i = 0; i < N; ++i) a[i] = T(); // reset all elements
}
dann kannst du das machen:
int x[10];
func(x);
Beachten Sie jedoch, dass dies nur für funktioniert Arrayskeine Zeiger.
Wie andere Antworten jedoch angemerkt haben, verwenden Sie std::vector
ist eine bessere Wahl.
Wenn es in Ihrer Kontrolle liegt, verwenden Sie einen STL-Container wie einen Vektor oder eine Deque anstelle eines Arrays.
Nein, es ist nicht möglich.
Eine Problemumgehung: Platzieren Sie einen speziellen Wert am letzten Wert des Arrays, damit Sie ihn erkennen können.

Igor Kriwokon
Eine offensichtliche Lösung ist die Verwendung von STL. Wenn dies nicht möglich ist, ist es besser, die Arraylänge explizit zu übergeben. Ich bin skeptisch gegenüber der Verwendung des Sentinel-Wert-Tricks für diesen speziellen Fall. Es funktioniert besser mit Arrays von Zeigern, da NULL ein guter Wert für einen Wächter ist. Mit einem Array aus ganzen Zahlen ist es nicht so einfach – Sie brauchen einen “magischen” Sentinel-Wert, was nicht gut ist.
Randnotiz: Wenn Ihr Array definiert und initialisiert ist als
int array[] = { X, Y, Z };
dann im selben Umfang wie Ihre Schleife
sizeof(array) gibt seine tatsächliche Größe in Bytes zurück, nicht die Größe des Zeigers. Sie können die Array-Länge als erhalten
sizeof(array) / sizeof(array[0])
Wenn Sie jedoch ein Array als Zeiger erhalten, können Sie diesen Trick im Allgemeinen nicht verwenden.

Ali
Sie könnten Ihrem int-Array ein Abschlusszeichen hinzufügen und dann manuell durch das Array gehen, um die Größe innerhalb der Methode zu ermitteln.
#include<iostream>
using namespace std;
int howBigIsBareArray(int arr[]){
int counter = 0;
while (arr[counter] != NULL){
counter++;
}
return counter;
}
int main(){
int a1[6] = {1,2,3,4,5,'\0'};
cout << "SizeOfMyArray: " << howBigIsBareArray(a1);
}
Dieses Programm druckt:
SizeOfMyArray: 5
Dies ist eine O(n)-Zeitkomplexitätsoperation, die schlecht ist. Sie sollten niemals durch ein Array gehen, nur um seine Größe zu entdecken.

Alex Martell
Wenn Sie die Größe nicht weitergeben können, benötigen Sie eine unterscheidbare Wächter -Wert am Ende (und Sie müssen ihn selbst dort einfügen — wie Sie festgestellt haben, können Sie C++ nicht vertrauen, dass er dies automatisch für Sie erledigt!). Es gibt keine Möglichkeit, die aufgerufene Funktion einfach auf magische Weise die Größe erraten zu lassen, wenn diese nicht übergeben wird und kein expliziter, zuverlässiger Wächter verwendet wird.

Alan Haggai Alavi
Können Sie versuchen, ein Nullzeichen anzuhängen \0
an das Array und senden Sie es dann? Auf diese Weise können Sie in der Schleife einfach nach \0 suchen.
9895800cookie-checkBestimmen Sie die Größe des Arrays, wenn es an die Funktion übergeben wirdyes
Verwandte Frage, die auch Demonstrationen dazu enthält: Wenn eine Funktion einen Array-Parameter mit einer bestimmten Größe hat, warum wird er durch einen Zeiger ersetzt?
– Gabriel Staples
24. September 2020 um 21:15 Uhr