2016-07-02 4 views
0
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の配列として扱われます。どうしてですか?配列のサイズが関数に渡される

+2

@tkausl:そうではありません。 –

答えて

0

「配列を関数に渡す」ことはできません。あなたができるように見えますが、できません。

この:

void quickSort(int* a,int s, int e) 

そして、あなたのシステム上で、ポインタのサイズが明らかに4バイトである:

void quickSort(int a[],int s, int e) 

が実際にあります。

これは、誤って別のもののサイズをとることが容易であるため、sizeofを使用してネイティブ配列のサイズを決定しないためです。

+0

まあ、関数に配列を渡すことはできますが、構文は恐ろしいので、コンパイル時にサイズを知る必要があります。 http://en.cppreference.com/w/cpp/language/array#Array-to-pointer_decay –

+0

を参照してください。@ N.Shead:いいえ、それは関数への参照を渡しています。 –

0

Array-to-pointer decayここで(関数の引数として配列を渡して)発生します。つまり、quickSortに渡された配列は、sizeof(a)は常にintへのポインタのサイズを返します。

関連する問題