Ich versuche C++ zu lernen, aber ich kann diesen Code hier einfach nicht einpacken, obwohl ich viel Zeit für die Suche nach einem Antwort:C++ - Grundlagen: auf der Basis von for-loop und Übergabe von C-artigen Arrays an Funktionen
#include <iostream>
void printArray1(int (&array)[3]) {
for(int x : array)
std::cout << x << " ";
}
void printArray2(int array[]) {
for(int x : array) // compiler error, can't find begin and end
std::cout << x << " ";
}
int main() {
int a[3] = {34,12,88};
for(int x : a)
std::cout << x << " ";
std::cout << std::endl;
printArray1(a);
printArray2(a);
std::cout << std::endl;
return 0;
}
In printArray1, wir erhalten einen Parameter, der eine Referenz auf ein Array der Größe ist 3. Bedeutet dies, dass wir die Adresse des gesamten Arrays erhalten oder erhalten wir nur eine Adresse an den ersten Element im Array der Größe 3? Wie wird dieser Parameter dann an die Schleife übergeben?
In printArray2 erhalten wir einen Zeiger auf das erste Element im Array, richtig? Mit anderen Worten, wir erhalten auch eine Adresse wie in printArray1? Daher wird die forwarded-basierte for-Schleife in dieser Funktion nicht kompiliert, weil wir keine Größenangaben für das Array haben, richtig?
Schließlich, wenn wir versuchen, mit der Entfernungs-basierten for-Schleife in main zu drucken, was passieren wir genau in der Schleife? Ist es hier ein Zeiger auf das erste Element im Array, und wenn ja, warum kompiliert es, wenn die for-Schleife in printArray2 den Zeiger nicht akzeptiert?
Mein Verständnis von C++ ist immer noch ziemlich elementar, so dass ich die Hilfe wirklich schätze, danke!
Haben Sie es selbst gesehen, indem Sie Ihr Programm debuggen? Was druckt es? –