2012-02-08 12 views
5

Jaki jest cel ANYSIZE_ARRAY znajdujący się w WinNT.h?Jaki jest cel ANYSIZE_ARRAY w <winnt.h>?

Widzę post na blogu MSDN na ten temat od 2004 roku, ale nie ma to dla mnie żadnego sensu.

+0

Podaj nam link do postu na blogu MSDN? –

+0

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

Odpowiedz

5

Zakładam, że mówisz o this blog post.

Jest często używany, gdy zmienna wielkości (brak danych w czasie kompilacji) array jest częścią struktury:

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

Aby pracować z tymi strukturami często najpierw wywołać pożądany API, aby uzyskać rozmiar dane, a następnie przydzielić blok pamięci wystarczająco duży i wreszcie zadzwoń ponownie do tego samego interfejsu API, aby mógł wypełnić dane ...

+0

dzięki - dlaczego używać tego na połączonej liście? – jglouie

+1

@LemonBeagle Połączona lista wymaga więcej pamięci i/lub implementacja API może już zawierać elementy wewnątrz tablicy i może po prostu zapakować ją do bufora wywołującego. Wolniej jest też przejrzeć listę przedmiotów i musisz uwolnić każdy przedmiot, a nie tylko duży bufor ... – Anders

1

Z this page:

W C, macierz zmiennych wielkości zadeklarowany jako a[1] lub a[ANYSIZE_ARRAY], gdzie ANYSIZE_ARRAY jest zdefiniowany jako 1. Następnie jest używany tak, jakby był większy.