void quickSort(int a[],int s,int e){
if(s>e){
return;
}
int pivot = parti(a,s,e);
cout<<"size "<<sizeof(a)<<endl;
私が関数の引数として配列を渡しているとき、サイズが4以上の配列はサイズ4の配列として扱われます。どうしてですか?配列のサイズが関数に渡される
void quickSort(int a[],int s,int e){
if(s>e){
return;
}
int pivot = parti(a,s,e);
cout<<"size "<<sizeof(a)<<endl;
私が関数の引数として配列を渡しているとき、サイズが4以上の配列はサイズ4の配列として扱われます。どうしてですか?配列のサイズが関数に渡される
「配列を関数に渡す」ことはできません。あなたができるように見えますが、できません。
この:
void quickSort(int* a,int s, int e)
そして、あなたのシステム上で、ポインタのサイズが明らかに4バイトである:
void quickSort(int a[],int s, int e)
が実際にあります。
これは、誤って別のもののサイズをとることが容易であるため、sizeof
を使用してネイティブ配列のサイズを決定しないためです。
まあ、関数に配列を渡すことはできますが、構文は恐ろしいので、コンパイル時にサイズを知る必要があります。 http://en.cppreference.com/w/cpp/language/array#Array-to-pointer_decay –
を参照してください。@ N.Shead:いいえ、それは関数への参照を渡しています。 –
Array-to-pointer decayここで(関数の引数として配列を渡して)発生します。つまり、quickSort
に渡された配列は、sizeof(a)
は常にintへのポインタのサイズを返します。
@tkausl:そうではありません。 –