3

この構造体を考えると:

typedef struct _WLAN_AVAILABLE_NETWORK_LIST {
    WLAN_AVAILABLE_NETWORK Network[1];
} *PWLAN_AVAILABLE_NETWORK_LIST;

宣言のWLAN_AVAILABLE_NETWORK Network[1]意味は?

4

2 に答える 2

9

柔軟な配列メンバーとして機能すること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]);
}
于 2012-08-13T15:14:41.023 に答える
1

typedef struct _WLAN_AVAILABLE_NETWORK_LIST {名前の付いた構造体を宣言する_wlan...list

WLAN_AVAILABLE_NETWORK Network[1];WLAN_AVAILABLE_NETWORK呼び出された構造体がどこかで宣言されていることを前提としています。これは長さ1(無意味)の配列であり、ネットワークと呼ばれます。

} *PWLAN_AVAILABLE_NETWORK_LIST;この構造体の(ポインタ)変数を即座に作成しますpwlan...list

于 2012-08-13T15:13:14.317 に答える