1

次のようなさまざまな配列へのポインタを取り込む関数があります。

    unsigned char *arr[] = {0x34, 0x10, 0x3f, 0x00, 0x00 }

関数が取得している各配列に含まれる要素(バイト)の数を知りたいです。たとえば、この配列が5バイトであることを確認する方法が必要です。これを関数に渡して、配列の値を出力します。Sizeof(arr)は私に正しい結果を与えません。

4

3 に答える 3

4

「配列はnullで終了する」などの規則を使用していない限り(C文字列は名目上そうであるように)、実行時に配列のサイズを決定することはできません。その時点で持っているのはポインタだけです。

于 2013-02-10T17:25:25.137 に答える
2

これはCです。Cではこれは存在しません。要素の数をどこかに覚えておく必要があります。

于 2013-02-10T17:25:17.680 に答える
0
sizeof(arr)/sizeof(unsigned char*)

これは、次のようにかなり簡単にマクロ化できます。

#define ARRAY_LENGTH(_array_)    (sizeof(_array_) / sizeof(_array_[0])

ところで、これは、配列と同じスコープで使用する場合にのみ機能します。配列を関数に渡す場合(そして配列がポインターに劣化する場合)、これは機能しません。配列を関数に渡す場合は、要素の数と、場合によっては各要素のサイズを渡す必要があります。

于 2013-02-10T17:54:47.787 に答える