-3
#include<stdio.h>
void func(int x[]);
main()
{
    int a[]={1,2,3,4};
    printf("size of %d \n",sizeof(a));  // Some value I'm getting
    func(a);
}
void func(int a[]) 
{
    printf("size of %d",sizeof(a));  // Value is changing
}

どちらの場合も、「a」の値は同じではありません。このコードを維持して同じ価値を得るには、さらにどのようなコードを追加する必要があるか、または変更が必要ですか?

関数のシグネチャを変更したくありません。署名を変更せずに、内部に追加する必要がある追加のコードは何func(int a[])ですか?.

4

1 に答える 1

4

配列関数の引数はポインターに減衰します。つまり、引数funcの型はint*です。sizeof(int*)したがって、内部でのみ計算できますfunc

配列サイズを渡したい場合は、別の引数として渡すことができます

func(a, sizeof(a)/sizeof(a[0]));
....
void func(int* a, int num_elems);

またはa、配列の末尾をマークする番兵値を含めるように初期化し、 でその値が見つかるまで要素を反復処理しますfunc

于 2013-04-20T07:24:07.567 に答える