0

重複の可能性:
C++ で配列を引数として渡す
C プログラミング言語の配列のサイズ?

次のコードの出力について説明してください。

#include<iostream>
using namespace std;

void foo(int array[])
{
    int size = sizeof(array) / sizeof(array[0]);    
    cout<<size<<endl;
}
int main()
{
    int array[] = {1,2,3};

    int size = sizeof(array) / sizeof(array[0]);
    cout<<size<<endl;
    foo(array);
    return 0;
}

対応する出力は次のとおりです。

3
2

foo()内とmain()内の両方のコードは、同じ出力を生成するために私に似ているように見えますが、そうではありません。理由を説明していただけますか?

4

2 に答える 2

4
void foo(int array[]) 

C または C++ では配列を値で渡すことができないため、上記の宣言は次のように解釈されます。

void foo(int * array)

配列を参照渡しすることを検討してください。

template <size_t N>
void foo( int(&array)[N] )
{   
    cout << N << endl;
}
于 2012-07-13T08:15:49.543 に答える
3

配列を関数に渡すのではなく、配列へのポインターを渡します。

つまり、 functionfoo()では、 の結果は、配列自体のサイズではなくsizeof(array)、 char の配列へのポインターのサイズであるため、関数は効果的にこれを行っています。

cout << sizeof(int *) / sizeof(array[0]);

この場合int *、サイズは 8、int のサイズは 4 であるため、関数から 2 の出力が得られます。

于 2012-07-13T08:15:55.257 に答える