この構造体を考えると:
typedef struct _WLAN_AVAILABLE_NETWORK_LIST {
WLAN_AVAILABLE_NETWORK Network[1];
} *PWLAN_AVAILABLE_NETWORK_LIST;
宣言のWLAN_AVAILABLE_NETWORK Network[1]
意味は?
柔軟な配列メンバーとして機能することNetwork
を目的としているようです。構造体をバイト単位で過剰に割り当てることにより、ライブラリとクライアントコードは、配列メンバーが要素の長さであるかのように、構造体の終わりを超えてアクセスできます。sizeof(Network) * (n - 1)
n
ライブラリコード:
PWLAN_AVAILABLE_NETWORK_LIST list = malloc(sizeof(_WLAN_AVAILABLE_NETWORK_LIST)
+ (sizeof(WLAN_AVAILABLE_NETWORK) * (n - 1)));
for (int i = 0; i < n; ++i) {
list->Network[i] = ...;
}
クライアントコード:
for (int i = 0; i < n; ++i) {
do_something(list->Network[i]);
}
typedef struct _WLAN_AVAILABLE_NETWORK_LIST {
名前の付いた構造体を宣言する_wlan...list
WLAN_AVAILABLE_NETWORK Network[1];
WLAN_AVAILABLE_NETWORK
呼び出された構造体がどこかで宣言されていることを前提としています。これは長さ1(無意味)の配列であり、ネットワークと呼ばれます。
} *PWLAN_AVAILABLE_NETWORK_LIST;
この構造体の(ポインタ)変数を即座に作成しますpwlan...list