2012-02-08 13 views
5

ANYSIZE_ARRAYの目的はWinNT.hにありますか?<winnt.h>のANYSIZE_ARRAYの目的は何ですか?

私は2004年からのMSDNのブログ記事を見ていますが、それは私には意味がありません。 this pageから

+0

MSDNブログ記事へのリンクをお願いしますか? –

+0

@Agnel http://blogs.msdn.com/b/oldnewthing/archive/2004/08/26/220873.aspx – jglouie

答えて

5

私はあなたが話していると仮定しますとthis blog post

可変サイズ(コンパイル時に不明)のアレイは、構造体の一部である場合にはしばしば使用されます。

typedef struct { 
    int CommonFlags 
    int CountOfThings; 
    THING Things[ANYSIZE_ARRAY]; //Things[1]; 
} THINGSANDFLAGS; 

これらの構造で作業するには、多くの場合、最初のサイズを取得するために必要なAPIを呼び出しますデータを取得し、十分な大きさのメモリブロックを割り当て、最後に同じAPIを呼び出してデータを書き込むことができます。

+0

ありがとうございます - なぜこれをリンクされたリストで使用しますか? – jglouie

+1

@LemonBeagleリンクされたリストはより多くのメモリを必要とするか、またはAPI実装が既に配列内の項目を内部的に持つことがあり、呼び出し元のバッファにmemcpyするだけです。また、アイテムのリストを歩くのが遅く、大きなバッファだけでなく各アイテムを解放する必要があります... – Anders

1

:Cで

は、可変サイズアレイはANYSIZE_ARRAY1として定義されるa[1]又はa[ANYSIZE_ARRAY]、として宣言されます。あたかもそれがより大きいかのように使用されます。

関連する問題