-1

次のようなメソッド宣言があります。

void createProgram(int32_t dev, int32_t* pixelId, int32_t* vertexId)

pixelId および vertexId 配列の要素数を確認するにはどうすればよいですか?

たとえば、含まれている要素の数を次のように調べようとしました。

sizeof(pixelId)/sizeof(int32_t)

sizeof(pixelId) はポインターのサイズを返します。

別の解決策はありますか?

ありがとう

4

1 に答える 1

3

あなたのタイトルに基づいて、パラメーターとパラメーターで渡される要素の数を知りたいと思います。要するに、できません。ポインターが行うのは、メモリ内のその時点に がいくつあるかではなく、 があることを示すことだけです。次のいずれかを行う必要があります。pixelIdvertexIdint32_t

  1. 追加のパラメーターで配列のサイズを指定します
  2. std::vectorそれらを渡すようなコレクションカプセル化クラスを使用します
  3. 配列の最後を示すために、配列内で通常は発生しない「マジック」番号で配列を閉じます。たとえば、文字列は通常、ゼロで終わるchar*'s です。ゼロバイトは有効な ASCII または Unicode 文字ではないため、これは有効です。

これらの 3 つの方法のいずれかを使用しないと、ポインタは単なるメモリ アドレスであり、それが指しているデータ型を示すものであり、存在する場合でも要素の数ではありません。

あなたがしようとした:

sizeof(pixelId)/sizeof(int32_t)

pixelIdは であるためint32_t*、これはメモリ ポインタであり、32 ビット OS と 64 ビット OS のどちらを使用しているかに基づいて 4 バイトまたは 8 バイトになります。sizeof(int32_t)は定義上 4 バイトであるため、この計算では2またはが返されますが、ポインター が指している1対象に関連する答えは返されません。

于 2013-05-24T10:35:38.217 に答える