0

配列の長さを調べる関数を C++ で作成しました。sizeof引数で渡された配列を見つけて、それをsizeof変数の型で割ります。これは機能するはずですが、常に 1 が返されます。明らかな何かが欠けていますか?それとも、これはポインタとメモリに関係していますか? これは私のコードです:

    #include <iostream>

    using namespace std;

    int lengthOf(int arr[]);

    int main() {
        int x[] = {1,2,3,0,9,8};
        int lenX = lengthOf(x);
        cout << lenX;
        return 0;
    }

    int lengthOf(int arr[]) {
        int totalSize = sizeof arr;
        cout << totalSize << endl;
        int elementSize = sizeof(int);

        return totalSize/elementSize;
    }

出力 (1 ではなく 6 にする必要があります):

    4
    1

私はかなり新しいので、これが悪い質問であればすみません。

4

3 に答える 3

1

配列をパラメーターとして渡すと、常にポインターに崩壊します。配列のサイズを確認したい場合は、配列を参照渡しする必要があります。次に例を示します。

template <int Size>
int lengthOf(int (&array)[Size]) {
    return Size;
}
于 2013-09-14T02:55:37.817 に答える
0

ポインターを使用する必要があります。

(sizeof(arr)/sizeof(*arr))

于 2013-09-14T02:53:54.833 に答える
0

配列を渡しているように見えint arr[]ますが、実際にはポインタを渡しています。int arr[]関数パラメーターとして使用される場合と同等ですint* arr。これは C に由来します。

C++ では、配列を渡したい場合、適切な方法は参照渡しです。

template <int N>
int lengthOf(int (&arr)[N]) {
     int totalSize = sizeof arr;
     cout << totalSize << endl;
     int elementSize = sizeof(int);

     return totalSize/elementSize;
}
于 2013-09-14T02:55:19.090 に答える