2

呼び出された関数に送信しようとした配列が正しく送信されていません。配列 'a' に 5 つの要素を挿入し、関数 insert 関数を使用して配列を渡し、次のコードの最後の 2 行を使用して配列のサイズをチェックするとします。配列の実際のサイズよりも 1 小さい値が表示されます。 . なぜこうなった??

void main()
{
    //rest of the code     
    insert(a,key);   //user-defined function
}

void insert(int a[],int key)
{
    int *p=a;
    int n = sizeof(a);
    printf("No. of elements entered:%d\n",n);
}
4

1 に答える 1

5

sizeof(a)ポインタのサイズをバイト単位で示しているだけです(マシンでは明らかに4です)。配列が関数パラメーターとして渡されるとポインターに分解されるため、配列が関数に渡されると、配列のサイズを決定する方法はありません。代わりに、配列のサイズを別のパラメーターとして渡す必要があります。

void insert(int a[], int n, int key)
{
    printf("No. of elements entered: %d\n", n);
}

int main()
{
    int a[5];

    insert(a, 5, key);
}
于 2013-07-30T11:35:58.030 に答える