この問題は永遠に私を悩ませています。配列があり、その宣言の範囲では、sizeof
演算子を使用して要素の数を調べることができますが、関数に渡すと配列の先頭へのポインタと解釈され、sizeof
演算子はこのポインタ変数のサイズを私に与えます。次の例のように、C/C++でのパラメータの受け渡しと配列の範囲
#include<iostream>
int count(int a[]){
return (sizeof(a)/sizeof(int));
}
int main(){
int a[]={1,2,3,4,5};
std::cout << sizeof(a)/sizeof(int) << " " << count(a) << std::endl;
return 0;
}
コードの出力は5 2
です。どのようにして配列を渡して、sizeof
演算子だけを使用してサイズを調べることができ、余分なサイズをこの関数のパラメータとして渡す必要はありませんか?
'std :: array'(C++ 11コンパイラが必要です)も考慮してください。 – jrok
C++ 11をお持ちでない場合は、 'boost :: array'を使用することができます。これは多かれ少なかれ同じことです。 – Grizzly