私はC++を学ぼうとしていますが、このコードの周りを頭で囲むことはできません。答え:printArray1でC++の基礎:forループとCスタイルの配列を関数に渡すためのレンジベース
#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;
}
、私たちは、これは我々が、アレイ全体のアドレスを受信しているか、私達はちょうど最初にアドレスを受信している大きさ3の配列への参照を意味していているパラメータを受信していますサイズ3の配列の要素ですか?また、このパラメータはどのようにループに渡されますか?
printArray2では、配列の最初の要素へのポインタを受け取っていますが、正しいですか?言い換えれば、printArray1のようなアドレスも受け取っていますか?したがって、配列のサイズデータがないため、この関数のレンジベースのforループはコンパイルされません。
最後に、遠隔ベースのforループをmainで印刷しようとすると、正確にループに渡されるのはどういうものでしょうか?それはここの配列の最初の要素へのポインタですか?その場合、なぜprintArray2のfor-loopがポインタを受け入れなかった場合にコンパイルされますか?
私のC++の理解はまだまだ基本的なので、本当に助けてくれてありがとう!
あなたは自分のプログラムをデバッグして見ましたか?何が印刷されますか? –