2

私は関数を次のように書きました:

string par(int a[]){
int s=sizeof(a)/sizeof(*a);
cout<<s<<endl;
/*
    ..do something
*/

}

メイン関数は次のように記述されます。

nt main(){
 int a[]={1,5,11,5};
 cout<<sizeof(a)/sizeof(*a)<<endl;
 cout<<par(a)<<endl;

}

私が得る出力は次のとおりです。

4

1

同じ配列を渡したのと同じはずだと思いますが。間違いを指摘してください..ありがとう..

4

4 に答える 4

1

配列のサイズを関数に渡す必要があります。「x[]」からサイズを計算することはできません。

string par(int a[], int size){

于 2013-05-02T17:58:56.413 に答える
1

C FAQ の質問6.4および6.21を参照してください。

Q: 配列が関数のパラメーターである場合、sizeof が配列のサイズを正しく報告しないのはなぜですか? テストルーチンがあります

f(char a[10])
{
    int i = sizeof(a);
    printf("%d\n", i);
}

10ではなく4を出力します。

A: コンパイラは、配列パラメーターがポインターとして (つまり、この例では char *a として宣言されています。質問6.4を参照してください) 宣言されていると見なし、sizeof はポインターのサイズを報告します。質問 1.24 と 7.28 も参照してください。

これは7.28が言うことです:

sizeofQ:ポインタが指すメモリ ブロックのサイズがわからないのはなぜですか?

A:sizeofポインターのサイズを示します。malloc されたブロックのサイズを調べる移植可能な方法はありません。(sizeof はコンパイル時に機能することも忘れないでください。質問 7.27 も参照してください。)

于 2013-05-02T18:00:56.233 に答える