0

重複
の可能性: sizeof (配列を指すポインタ) を見つける方法
パラメータとして渡される sizeof 配列

私はこのコードを持っています:

class total {

public:
    void display(int []);
};

void total::display(int *arr)
{
    int len = sizeof(arr)/sizeof(int);
    cout << len;
}

int main(void)
{
    int arr[] = { 10, 0, 0, 4, 20 };
    total A;
    A.display(arr);
    return 0;
}

出力は1ですが、配列の長さは 5 であると予想していましたがsizeof()ステートメント を使用するとmain()5 が表示されます。では、なぜ sizeof() がメンバー関数内で正しい値を表示しないのですか?

4

2 に答える 2

3

sizeof配列オペランドの は配列のサイズを生成しますがsizeof、ポインター オペランドの はポインターのサイズを生成します。C/C++ では、ポインターと配列は同じではありません。

于 2012-07-01T09:34:36.753 に答える
1

sizeof 演算子は、オペランドのサイズを返します。あなたの場合sizeof(arr)、オペランドの型は ですint*。したがって、結果は 4 または 8 になります (プラットフォームによっては、2 または 1 になることもあります)。関数内で渡された配列の長さを知る方法はありません。書いても

void total::display(int arr[5])
{
}

メソッドのパラメーターとして使用される場合、配列はポインターに変換されるため、これは何も変更しません。任意のサイズの配列を渡すことができます。

于 2012-07-01T09:37:57.950 に答える