C言語で配列長を得る関数
742 ワード
1、c言語では、配列を定義した後、sizeofコマンドで配列の長さ(要素の数を収容可能)を取得できます.たとえば、次のようになります.
2、ただし、配列名パラメータをサブ関数に渡すことで、配列長を得ることはできません.
例:
なぜなら、aは関数パラメータであり、本関数では、aは1つのポインタ(アドレス、システムは本関数の実行時に、aが示すアドレスがどれだけ大きいか分からないデータ記憶空間であり、ここでは関数:1つのデータ記憶空間のヘッダアドレスを教えるだけである)であるため、sizoef(a)の結果はポインタ変数aがメモリの大きさを占め、一般的に32ビットマシン上で4バイトである.a[0]はintタイプ、sizeof(a[0])も4バイトなので、結果は常に1になります.3、したがって、配列長を得るには、配列定義が存在するコード領域においてのみ、以上の方法を採用してこそ、効果を達成することができる.
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、したがって、配列長を得るには、配列定義が存在するコード領域においてのみ、以上の方法を採用してこそ、効果を達成することができる.