C言語で配列長を得る関数

742 ワード

1、c言語では、配列を定義した後、sizeofコマンドで配列の長さ(要素の数を収容可能)を取得できます.たとえば、次のようになります.
int data[4];
int length;
length=sizeof(data)/sizeof(data[0]);  //        ,             
printf("length of data[4]=%d", length ); //  length of data[4]=4

2、ただし、配列名パラメータをサブ関数に渡すことで、配列長を得ることはできません.
例:
int getLength(int[] a){
    int length;
    length=sizeof(a)/sizeof(a[0]); //      ,        1
    return length;
}

なぜなら、aは関数パラメータであり、本関数では、aは1つのポインタ(アドレス、システムは本関数の実行時に、aが示すアドレスがどれだけ大きいか分からないデータ記憶空間であり、ここでは関数:1つのデータ記憶空間のヘッダアドレスを教えるだけである)であるため、sizoef(a)の結果はポインタ変数aがメモリの大きさを占め、一般的に32ビットマシン上で4バイトである.a[0]はintタイプ、sizeof(a[0])も4バイトなので、結果は常に1になります.3、したがって、配列長を得るには、配列定義が存在するコード領域においてのみ、以上の方法を採用してこそ、効果を達成することができる.