2

引数として配列を受け取る C の関数があります (gcc 4.8.0 を使用しています)。追加の引数array_countを渡さずに、配列内の要素の数を正確に決定する方法はありますか?

4

6 に答える 6

0

ありえない。これが、実際に長さを決定できる連結リストのようなデータ構造を使用するか、関数で長さ引数を必要とする理由です。必要な長さの引数だけでも、それが真であることを知る方法はありません。そのため、配列を終了するために、API には標準のセンチネル値も必要です。通常、これは NULL または何かになる可能性がありますが、配列の型によって異なります。

于 2013-10-05T13:28:10.290 に答える
0

これは C で実行可能です。 sizeof を介して配列の定義の同じスコープ内にいる場合は、配列のサイズを照会できます。配列をパラメーターとして受け取る関数のスコープ内にある場合は、パラメーターを配列へのポインターとして宣言する必要があります (配列としてだけでなく、この場合、配列は最初の要素へのポインターに減衰します)。この場合、配列のサイズは保存されます。引数の受け渡し中:

void foo(int (*param)[3] ) { assert (sizeof(*param) == sizeof(int)*3; }

ただし、コンパイル時にサイズが不明な動的に割り当てられたメモリへの「配列」ポインターを意味する場合は、サイズを個別に渡す必要があります。

于 2013-10-05T16:40:14.620 に答える